正则表达式用于匹配。
总结自https://www.oschina.net/question/12_9507
元字符(metacharacter) | 含义 |
\ | 转义符:当匹配.或*时它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,使用\.和\*。要查找\本身,你也得用\\。需要转义的元字符有:.*\() |
| | 分枝条件:其左边为一个条件,右边为一个条件互相独立。 |
\b | 匹配单词的开头或结尾。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并 不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。 |
\d 或 [0-9] | 匹配数字。 |
\s | 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。 |
\w 或 [a-z0-9A-Z_] | 匹配字母或数字或下划线或汉字等。 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
. | 匹配除了换行符以外的任意字符。 |
[...] | 匹配没有预定义元字符的字符集合。比如使用[aeiou]匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)。 |
(...) | 重复多个字符,可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,比如(\d{1,3}\.){3},你也可以对子表达式进行其它一些操作。 |
数量重复 | |
? | 重复零次或一次。 |
{n} | n需为数字,代表前面内容重复n次,例如\d{2}表示连续两个数字。 |
{n,} | n需为数字,代表前面内容至少重复n次。 |
{m,n} | m,n需为数字,代表前面内容重复次数大于等于m且小于等于n。 |
* | 指定*前边的内容可以连续重复使用任意次(包括零次)。 |
+ | 是和*类似的元字符,匹配重复1次或更多次。 |
*? | 重复任意次,但尽可能少重复 |
+? | 重复1次或更多次,但尽可能少重复 |
?? | 重复0次或1次,但尽可能少重复 |
{n,m}? | 重复n到m次,但尽可能少重复 |
{n,}? | 重复n次以上,但尽可能少重复 |
捕获 | |
(exp) | 匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) | 匹配exp,并捕获文本到名称为name的组里,也可以写成 (?'name'exp) |
(?:exp) | 匹配exp,不捕获匹配的文本,也不给此分组分配组号 |
零宽断言 | |
(?=exp) | 匹配exp前面的位置。比如\b\w+(?=ing\b), 匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。 |
(?<=exp) | 匹配exp后面的位置。比如(?<=\bre)\w+\b会匹配以re开头的单词的后半部 分(除了re以外的部分),例如在查找reading a book时,它匹配ading。 |
(?!exp) | 匹配后面跟的不是exp的位置 |
(?<!exp) | 匹配前面不是exp的位置 |
注释 | |
(?#comment) | 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 |
其他 | |
\a | 报警字符(打印它的效果是电脑嘀一声) |
\b | 通常是单词分界位置,但如果在字符类里使用代表退格 |
\t | 制表符,Tab |
\r | 回车 |
\v | 竖向制表符 |
\f | 换页符 |
\n | 换行符 |
\e | Escape |
\0nn | ASCII代码中八进制代码为nn的字符 |
\xnn | ASCII代码中十六进制代码为nn的字符 |
\unnnn | Unicode代码中十六进制代码为nnnn的字符 |
\cN | ASCII控制字符。比如\cC代表Ctrl+C |
\A | 字符串开头(类似^,但不受处理多行选项的影响) |
\Z | 字符串结尾或行尾(不受处理多行选项的影响) |
\z | 字符串结尾(类似$,但不受处理多行选项的影响) |
\G | 当前搜索的开头 |
\p{name} | Unicode中命名为name的字符类,例如\p{IsGreek} |
(?>exp) | 贪婪子表达式 |
(?<x>-<y>exp) | 平衡组 |
(?im-nsx:exp) | 在子表达式exp中改变处理选项 |
(?im-nsx) | 为表达式后面的部分改变处理选项 |
(?(exp)yes|no) | 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为 此组的表达式;否则使用no |
(?(exp)yes) | 同上,只是使用空表达式作为no |
(?(name)yes|no) | 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用 no |
(?(name)yes) | 同上,只是使用空表达式作为no |