. 匹配任意单个字符
\ 用来反转
for: text:a.out 我想匹配'a.',那么就可以用\.
如果想匹配'\',就可以用\\
[] 用来取字符组,自匹配中括号里的单个字符
For: text: hear near 想要同时匹配这两个单词,可以用[hn]ear
[hn]的意思是取h或者n
还可以是如下模式[a-z][0-9],他们的意思是可以去a到z的任意一个字符,0-9的任意一个字符。还可以将上面的操作取反[^a-z][^0-9],他们意思是取非a到z,非0-9
\r回车 \n换行 \ttab \p换页 \v垂直tab
\d 所有数字等价于[0-9]
\D 所有非数字 等价于[^0-9]
\w 所有单个大小写字母、数字、下划线,与 [a-zA-Z0-9_] 相同
\W 所有单个非大小写字母、非数字、非下划线,与[^a-zA-Z0-9_] 相同
\s 所有单个空字符,与[\f\n\r\t\v] 相同
\S 所有单个非空字符,与[^\f\n\r\t\v] 相同
[^x]表示反义,除X外的所有字符;[^abc],除abc之外的所有任意一个字符
+ 用来匹配一个或多个相同与前面一个的操作
for: text: 123a 346g 想匹配数字小于4且后面有带有英文字母的 [0-3]+[a-zA-Z]。123a被匹配,346g没有
? 匹配0个或1个字符
for: flowers? 这个可以匹配flower或者flowers,但是不能匹配flowerss之类的
{} 出现次数
For: \d{3} 匹配连着出现三个数字 \d{1,3}连着出现1-3个数字
惰性匹配于贪婪匹配的区别:惰性匹配是匹配完一个之后,就把信息保存起来,开始寻找下一次匹配;而贪婪匹配是不会保存起来的,等于说还没跳出这次匹配,直到匹配完全或者不符合条件的情况出现。
For: text:Jimmy is a <b>junior</b>developer <b>living</b> in <b>xi'an</c>.
贪婪匹配:<b>.*</b>
匹配结果:<b>junior</b>developer <b>living</b>
惰性匹配:<b>.*?</b>
匹配结果:<b>junior</b> <b>living</b>
惰性匹配比贪婪匹配多一个问号,意思是匹配0个或一个,当有一个匹配的时候就会将信息保存起来,进入下一次匹配。
for:flowers?? 它只会匹配flower,当它匹配完flower的时候,发觉匹配条件已经成立,s开始就是下一次匹配了
\b 单词边界符 通常情况下,以 空格、段落首行、段落末尾、逗号、句号等符号作为边界,值得注意的是,分隔符“-”也可以作为边界。
\B 非单词边界
^ 文本开头 $文本结尾
() 子模式,在括号内的字符集合可以看成是一个元素,可以用于上面那些针对单字符的操作。
| 或
\数字 表示向后引用,数字表示这里引用的是前面的第几个子模式。
For:(of) \1 匹配 of of。意思就是of紧跟着一个of
$数字 用于替换子模式。数字表示这里替换的是前面的第几个子模式。
for:<h1>(.*?)</h1> 下文就就可以用$1来表示'.*?',即<h1></h1>之间的文本
?= 正向预查 这东西放在子模式里面的,其意义是先匹配完,再取子模式左边(前面)的内容,子模式去掉
For: windowxp window 95 匹配命令 window (?=[a-z]+\b) 先匹配得到window xp其中xp为子模式内容,然后取子模式左边的内容剩余window。所以最后的匹配内容为window
?<= 反向预查 与正向预查相反,它取子模式右边(后面)的内容
For: <h2>This is header,too.</h2>
regex: (?<=<h(?<number>[1-6])>).*?(?=</h\k<number>>)
Result:This is header,too.
用正向预查,取左边内容,用反向预查取右边内容,意思就是对子模式的内容取反,再去匹配。所以取得是他们中间的内容。
?! 负正向预查 它与正向预查相反。其实只是对子模式内的内容取反,取值方向还是一样的。
For: windowxp 123 window 95匹配命令 window (?![a-z]+\b) 那么它最终匹配的是window 95的那个window而非xp的那个
?<! 负反向预查 同理它与反向预查相反。相反的也只是子模式里的内容