正则表达式

1.特殊字符

    : 单词的开头和结尾,也就是单词的分界处。匹配一个位置。

  ^ :匹配字符串开始。有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^和$的意义就变成了匹配行的开始处和结束处。

  $ :匹配字符串结束

   :匹配除了换行符以外的任意字符。

  * :*前边的内容可以连续重复使用任意次以使整个表达式得到匹配(可以是0次)。

  + :+前面的内容可以连续重复使用1次或者多次

   :重复0次或一次

  {n}:重复n此

  {n,}:重复n次或更多次

  {n,m}:重复n次到m次

  d :匹配一位数字(0,1,2...)

  -   :只匹配它本身

  s  :匹配任意的空白符,包括空格,制表符(tab),换行符,中文全角空格等。

   :匹配字母或数字或下划线或汉字等。

      :如果查找特殊字符本身,前面加上  

  你想匹配没有预定义元字符的字符集合,你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母

  [.?!]匹配标点符号(.?!)

  一个字符范围,像[0-9]代表的含意与d就是完全一致的:一位数字

  

2.分枝条件

是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。

d{5}-d{4}|d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成d{5}|d{5}-d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

3.分组

重复多个字符,用小括号来指定子表达式(也叫做分组)

例子:(d{1,3}.){3}d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:d{1,3}匹配1到3位的数字,(d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(d{1,3})。

4.反义

W(大写):匹配任意不是字母,数字,下划线,汉字的字符

S(大写):匹配任意不是空白符的字符

D:匹配任意非数字的字符

B:匹配不是单词开头或结束的位置

[^x]:匹配除了x以外的任意字符

[^aeiou]:匹配除了aeiou这几个字母以外的任意字符

  例子:S+匹配不包含空白符的字符串。

<a[^>]+>匹配用尖括号括起来的以a开头的字符串

5.后向引用

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

后向引用用于重复搜索前面某个分组匹配的文本。例如,1代表分组1匹配的文本。

自定义表达式的组名:(?<Word>w+)(或者把尖括号换成'也行:(?'Word'w+)),这样就把w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用k<Word>,所以上一个例子也可以写成这样:(?<Word>w+)s+k<Word>。

小括号的用法:

捕获:

(exp):匹配exp,并捕获文本到自动命名的组里

(?<name>exp):匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

(?:exp):匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言:

(?=exp):匹配exp前面的位置

(?<=exp):匹配exp后面的位置

(?!exp):匹配后面跟的不是exp的位置

(?<!exp)匹配前面不是exp的位置

注释:

(?#comment):这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

6.零宽断言

接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如w+(?=ing),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

(?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的后面能匹配表达式exp。比如(?<=re)w+会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

 http://deerchao.net/tutorials/regex/regex.htm#grouping

原文地址:https://www.cnblogs.com/liu-Gray/p/5222316.html