正则表达式入门
通配符:
* 任意长度的任意字符
? 任意一个字符
----------------------------------------------------------------------------
元字符:
\b 英语单词中间的间隔符,代表一个位置,不代表几个字符(可能是若干空格,标点,也可能没东西)
^ 断言行首的位置
$ 断言行末的位置
. 除了换行符以外的任意长度的任意字符
\d 一个数字
\s 一个空白符(空格,Tab,Enter)
\w 一个char(中文,字母,数字,下划线)
PS:查找元字符需要转义,即加在字符前面加一个\
----------------------------------------------------------------------------
限定符:
? 该符号之前的那个符号可能重复若0次或一次
* 该符号之前的那个符号可能重复若干次(可以没有)
+ 该符号之前的那个符号可能重复若干次(至少一次)
{n} 该符号之前的那个符号可能重复n次
{n,m} 该符号之前的那个符号可能重复n到m次
----------------------------------------------------------------------------
字符类:
[ ] 代表了一个方括号内枚举到的字符,共有如[abcd]或[a-d]或者[a-de-gf-j]等三种枚举方式
----------------------------------------------------------------------------
分支条件:
| 该符号前后有两种选择,满足任何一种即可
----------------------------------------------------------------------------
分组:
() 该符号括起来的内容作为一个整体,可以视为一个符号
(exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
(?=exp) | 匹配exp前面的位置 |
(?<=exp) | 匹配exp后面的位置 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
(?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
此外,[abc]等价于(a|b|c)
----------------------------------------------------------------------------
反义:
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
----------------------------------------------------------------------------
后向引用:
\n 从最前面开始数,第n个()已经匹配到的内容。
----------------------------------------------------------------------------
零宽断言:
(?=exp) 先行断言:这个括号表达式后面的内容前面必须满足exp,放在需要断言的单元后面
(?<=exp) 后发断言:这个括号表达式前面的内容前面必须满足exp,放在需要断言的单元前面
负向零宽断言:
(?!exp) 先行断言:这个括号表达式后面的内容前面必须不满足exp,放在需要断言的单元后面
(?<!exp) 后发断言:这个括号表达式前面的内容前面必须不满足exp,放在需要断言的单元前面
----------------------------------------------------------------------------
注释:
(?#comment) 表达式中可以插入上述格式的注释
PS:忽略模式中的空白符后,可以直接用#做注释,功能类似//
----------------------------------------------------------------------------
贪婪和懒惰
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |