学习地址
个人笔记
一、测试工具
二、元字符(metacharacter)
-
\b
:单词的开头或者结尾,只匹配一个 位置 -
.
: 匹配除了换行符以外的任意 字符 -
*
: 它代表数量,指定自己前面的内容可以连续重复使用任意次 (0...n) ,以便整个表达式得到匹配 -
\d
: 匹配一个数字(digit)(0/1/2/3...) -
\s
: 匹配任意的空白字符,包括空格, tab, 换行符,中文全角空格等 -
\w
: 匹配字母或数字或下划线或汉字等 -
+
: 代表数量,指定自己前面的内容可以连续重复使用任意次 (1...n) -
^
: 匹配字符串的开始,匹配一个 位置 -
$
: 匹配字符串的结束,匹配一个 位置 -
{2}
: 只能不多不少重复两次 -
{5,12}
: 至少出现5次,至多出现12次
三、字符转义
作用:主要用于查找元字符本身
- 例如要匹配
*
,我们可以输入\*
- 要匹配
\
,我们可以输入\\
四、限定符
<h5 align = "center">常用限定符</h5>
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{2} | 重复两次 |
{2,} | 重复两次以上 |
{2,10} | 重复2到10次(包含) |
五、字符类
[]
For Instance:
-
[aeiou]
: 匹配任意一个元音字母 -
[.?*]
: 匹配其中一个符号
六、分枝条件
正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开
For Instance:
\d{5}-\d{4}|\d{5}
:这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。
之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成\d{5}|\d{5}-\d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。
原因是 匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。
七、分组
用小括号来指定子表达式
八、反义
<h5 align = "center">常用的反义代码</h5>
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符串 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结尾的位置 |
[^x] | 匹配 x以外的其他字符 |
[^aeiou] | 匹配元音字母以为的任意字符 |
九、后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推
后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示例:
-
\b(\w+)\b\s+\1\b
:可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。 - 你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:
(?<Word>\w+)
(或者把尖括号换成'也行:(?'Word'\w+)),这样就把\w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b。
十、零度断言
-
(?=exp)
也叫零宽度正预测先行断言: 它断言自身出现的位置的后面能匹配表达式exp.这里的自身指的并不是 exp, 而是作用的字符串 -
(?<=exp)
也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
十一、负向零度断言
它只匹配一个位置,并不消费任何字符
- (?!exp)零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp
- (?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp
十二、注释
小括号的另一种用途是通过语法(?#comment)来包含注释
For Instance:
2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)
十三、贪婪与懒惰
-
贪婪匹配: (在使整个表达式能得到匹配的前提下)匹配尽可能多的字符
-
懒惰匹配: (在使整个表达式能得到匹配的前提下)匹配尽可能少的字符
<h5 align = "center">懒惰限定符</h5>
代码/语法 | 说明 |
---|---|
*? | 重复零次或更多次,但尽可能少重复 |
+? | 重复一次或更多次,但尽可能少重复 |
?? | 重复零次或一次,但尽可能少重复 |
{2}? | 重复两次,但尽可能少重复 |
{2,}? | 重复两次以上,但尽可能少重复 |
{2,10}? | 重复2到10次(包含),但尽可能少重复 |
网友评论