在讲正则表达式之前,先给大家科普一下它的起源:

在1951 年,一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。

之后一段时间,人们发现可以将这一工作成果应用于其他方面。Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。

(Unix之父:Ken Thompson)

在最近的六十年中,正则表达式逐渐从模糊而深奥的数学概念,发展成为在计算机各类工具和软件包应用中的主要功能。不仅仅众多UNIX工具支持正则表达式,近二十年来,在WINDOWS的阵营下,正则表达式的思想和应用在大部分 Windows 开发者工具包中得到支持和嵌入应用!从正则式在Microsoft Visual Basic 6 或 Microsoft VBScript到.NET Framework中的探索和发展,WINDOWS系列产品对正则表达式的支持发展到无与伦比的高度,几乎所有 Microsoft 开发者和所有.NET语言都可以使用正则表达式。如果你是一位接触计算机语言的工作者,那么你会在主流操作系统(*nix[Linux, Unix等]、Windows、HP、BeOS等)、主流的开发语言(delphi、Scala、PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python等)、数以亿万计的各种应用软件中,都可以看到正则表达式优美的舞姿。


正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。

目的

1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

特点

正则表达式的特点是:

1. 灵活性、逻辑性和功能性非常强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

正则表达式常见符号
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择,要匹配|,请使用\|。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。
\p{P}

小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。

其他六个属性:

L:字母;

M:标记符号(一般不会单独出现);

Z:分隔符(比如空格、换行等);

S:符号(比如数学符号、货币符号等);

N:数字(比如阿拉伯数字、罗马数字等);

C:其他字符。

*注:此语法部分语言不支持,例:javascript。

\S 匹配任何可见字符。等价于[^ \f\n\r\t\v]。
\s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\d 匹配一个数字字符。等价于[0-9]。grep 要加上-P,perl正则支持
\D 匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持
\num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
\xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。
\w 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集>。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[zf]ood”则匹配“zood”或“food”。
[xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[a-z]

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

时不时感觉看着毫无头绪?

并不是所有的编程语言都实行统一标准,正则表达式语法支持情况:

为了我们能够很好的记忆这些perl形式的编程符号,下面这一段文字可以很好的帮助我们理解:

?,*,+,\d,\w 都是等价字符
  ?等价于匹配长度{0,1}
  *等价于匹配长度{0,} 
  +等价于匹配长度{1,}
  \d等价于[0-9]

\D等价于[^0-9]
  \w等价于[A-Za-z_0-9]

\W等价于[^A-Za-z_0-9]。

常用运算符与表达式:
  
^ 开始
  () 域段
  [] 包含,默认是一个字符长度
  [^] 不包含,默认是一个字符长度
  {n,m} 匹配长度 
  . 任何单个字符(\. 字符点)
  | 或
  \ 转义
  $ 结尾
  [A-Z] 26个大写字母
  [a-z] 26个小写字母
  [0-9] 0至9数字

[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
  , 分割
  .
  
  分割语法:
  [A,H,T,W] 包含A或H或T或W字母
  [a,h,t,w] 包含a或h或t或w字母
  [0,3,6,8] 包含0或3或6或8数字

以上内容摘取自百度百科(点击查看),菜鸟教程

正则表达式虽然不好识记,但是当你理解之后使用是非常方便的(敲代码的时候,写了一长串正则表达式,分号结束之后自己也不认识自己写的啥,啊哈哈哈哈哈)

Mr.J--正则表达式相关推荐

  1. Mr.J -- yield关键字生成器产生值

    yield是什么 yield是ES6的新关键字,使生成器函数执行暂停,yield关键字后面的表达式的值返回给生成器的调用者.它可以被认为是一个基于生成器的版本的return关键字. yield关键字实 ...

  2. Hello,Mr.J——唠唠叨叨年终总结

      有想写什么的想法的时候,圣诞的阳光还在还能通过对面的大楼反射回来,等真正的有时间动手开始写,已经能听到外面路人在商量跨年的声音了,倒不是没有心思写,只是总习惯安静的找出大段的时间专注于一件事情.在 ...

  3. Mr.J-- 简单生日页面制作

    由于本次页面使用的图片涉及个人隐私,已经打码处理. 信息量不小,大家慢慢食用(滑稽.png) <!-- 制作人:Mr.J联系方式:2538808265(QQ)blog: https://blog ...

  4. Emacs常用命令快速参考

    Emacs常用命令快速参考 Emacs常用命令的汇总,来自Emacs参考卡片 注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键 ...

  5. ZOJ 2913 Bus Pass (近期的最远BFS HDU2377)

    题意  在全部城市中找一个中心满足这个中心到全部公交网站距离的最大值最小 输出最小距离和满足最小距离编号最小的中心 最基础的BFS  对每一个公交网站BFS  dis[i]表示编号为i的点到全部公交网 ...

  6. 2050 Programming Competition (CCPC)

    Pro&Sol 链接: https://pan.baidu.com/s/17Tt3EPKEQivP2-3OHkYD2A 提取码: wbnu 复制这段内容后打开百度网盘手机App,操作更方便哦 ...

  7. ES6学习--Javascript中的那三个点(...)

    看这篇文章之前建议先看:ES6--解构 前言 扩展运算符(Spread Operator)和剩余参数(Rest Parameter)的写法相同,都是在变量或字面量之前加三个点(...),并且只能用于包 ...

  8. ES6学习(箭头函数详解)

    箭头函数(Arrow Function) 箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或 new.target.这些函数表达式更适用于那些本来需要匿名 ...

  9. ES6学习(var,let,const区别)

    本人写这个专题的博客是为了总结一下自己学习,使用还有刷题时学到的ES6知识点,并做以归纳. var,let,const 三个属性都可以声明变量. 作用域 var  重新赋值,重新定义变量,可以重复声明 ...

  10. 逻辑OR(||)妙用

    逻辑OR 如果第一个操作数为真,第二个操作数就无需求值了. 子表达式值所有可能的组合 整体表达式的值 false || false false(0) false || true true(1) tru ...

最新文章

  1. JavaScript区分click事件和mousedown(mouseup、mousemove)方法
  2. Spring松耦合的实现
  3. 中英数字混合的字符串截取
  4. boost::system::error_category相关的测试程序
  5. 常用验证函数isset()/empty()/is_numeric()函数
  6. 那些年移动互联网行业曾经走过的弯路
  7. 84-java版spark2.x读取es6.x
  8. 抖音直播APP软件系统为什么能这么火?反映出的问题又会是什么?
  9. [转载] numpy.ma详解
  10. 怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
  11. 高等代数——大学高等代数课程创新教材(丘维声)——3.2笔记+习题
  12. 8款超级好用的3D建模软件上下篇
  13. html js开发课程表,利用JS实现手机移动端课程表代码
  14. 发现一个国外的学习网站
  15. Xrm.Utility.openEntityForm的使用
  16. 维护计算机网络教室的常见问题及解决方案
  17. 震惊!网瘾少年在冒险岛的逆袭之路
  18. 对称加密非对称加密混合加密
  19. 源代码防泄密加密介绍
  20. 【Typora】添加水印

热门文章

  1. 目前最先进的目标检测能用于自动驾驶吗?这群德国人认真地做了个测评!
  2. 计算机视觉论文-2021-07-01
  3. 量子科技概念大火,国内现状如何?华为BAT均入局量子计算
  4. INTERSPEECH2020大会收录了哪些论文?
  5. ReedShepp与Dubins path的matlab实现
  6. 景观连接度指数怎么算都是0的解决方案
  7. android alarmmanager定时任务,AlarmManager 实现定时任务
  8. html页面怎么引用通用的头部,html 如何引入一个公共的头部和底部
  9. ant java eclipse_Eclipse之ANT使用
  10. VMware vSphere 6.5配置系列