YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

正则表达式

?匹配前面的子表达式零次或一次

data?.dat

*匹配前面的子表达式零次或多次

data*.dat

+匹配前面子表达式一次或多次

^[0-9]+abc$
  • ^为匹配输入字符串的开始位置
  • [0-9]+匹配多个数字,[0-9]匹配单个数字,+匹配一个或者多个
  • abc$匹配字母abc并以abc结尾,$为匹配输入字符串的结束位置。

{n}匹配确定的n次

o{2}不能匹配Bob,但能匹配food

o{n,}至少匹配n次

o{2,} 不能匹配Bob,但能匹配fooood

{n,m}最少匹配n次且最多匹配m次,注意在逗号和两个数之间不能有空格。

在*、+或?限定符之后放置?,该表达式从‘贪心’表达式转换为‘非贪心’表达式或者最小匹配。

$匹配字符串的结尾位置

^匹配字符串的开始位置

\b匹配一个字边界

/\bCha/

匹配以Cha开头的字符


\B匹配非字边界

/\Bapt/

匹配字符串中apt


.匹配出换行符\n之外的任何单字符

\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符

[]字符开始和结束的位置

x|y 匹配x或y

[xyz]匹配所包含的任意一个字符

[^xyz]匹配未包含的任意字符

[a-z]字符范围,匹配指定范围内的任意字符

[^a-z],负值字符范围,匹配任何不在指定范围内的任意字符

\cx匹配由x指明的控制字符,x的值必须为A-Z或a-z之一,否则c视为原义的‘c’字符

\d匹配一个数字字符,等价于[0-9]

\D匹配一个非数字字符,等价于[ ^0-9]

\f匹配一个换页符,等价于\x0c和\cL

\n匹配一个换行符,等价于\x0a和\cJ

\r匹配一个回车符,等价于\x0d和\cM

\s匹配任何空白字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]

\S匹配任何非空白字符,等价于[ ^\f\n\r\t\v]

\t匹配一个制表符,等价于\x09和\cI

\v匹配一个垂直制表符,等价于\x0b和\cK

\w匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_]

\W匹配任何非单词字符,等价于[ ^A-Za-z0-9_]

\xn匹配n,其中n为十六进制转义值

|,满足左右两侧其中一种就应该当成匹配


后向引用

\b(\w+)\b\s+\1\b

匹配重复的单词,像go go。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

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

使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:

reg1

​(?=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。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字

(?<!exp),断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。