基础知识篇
一、 七个元字符
| 限定符 | 描述 | 模式 |
| . |
匹配出换行符以外的任意字符 |
\d*\.\d |
|
\w |
匹配字母数字或下划线或者汉字或者下划线 |
"be+" |
| \s |
匹配任意空白符 |
"rai?n" |
| \d |
匹配数字 |
",\d{3}" |
| \b |
匹配单词开始或结束,它只是匹配一个位置 |
"\d{2,}" |
|
^ |
匹配字符串开始 |
"\d{3,5}" |
|
$ |
匹配字符串结束 |
"\d{3,5}" |
|
代码/语法 |
说明 |
|
* |
重复0次或多次 |
|
+ |
重复一次或多次 |
|
? |
重复零次或1次 |
|
{n} |
重复n次 |
|
{n,} |
重复至少n次 |
|
{n,m} |
重复至少n次,但不多于m次 |
|
代码/语法 |
说明 |
|
\W |
匹配任意一个不是字母或数字下划线或汉字的字符 |
|
\S |
匹配任意一个不是空白符的字符 |
|
\D |
匹配不是数字的字符 |
|
\B |
匹配不是单词开头或者结尾的位置 |
|
[^X] |
匹配除了X以外的任意字符 |
|
[^aeiou] |
匹配除了aeiou这几个字母以外的任意字符 |
|
分类 |
代表/语法 |
说明 |
|
捕获
|
(exp) |
匹配exp,并捕获文本到自动命名的组里 |
|
(?<name>exp) |
匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp) |
|
|
(?:exp) |
匹配exp,不捕获匹配文本,也不给分组分配组号 |
|
|
断言
|
(?=exp) |
匹配exp前面位置,但是不匹配exp |
|
(?<=exp) |
匹配exp后面位置,但是不匹配exp |
|
|
(?!exp) |
匹配后面的不是exp的位置,但是不匹配exp |
|
|
(?<!exp) |
匹配前面不是exp的位置,但是不匹配exp |
|
|
注释 |
(?#comment) |
注释 |
|
语法 |
说明 |
|
(?’group’) |
把捕获的内容命名为group,并压入堆栈 |
|
(?’-group’) |
从堆栈上弹出最后压入堆栈名为group的捕获内容,如果堆栈为空则本组匹配失败 |
|
(?(group)yes|no) |
如果堆栈上存在名为group的捕获内容的话,继续匹配yes部分的表达式,否则匹配no的表达式 |
|
(?!) |
零宽度负先行断言,由于没有后缀表达式,试图匹配总是失败 |




| 限定符 | 描述 | 模式 | 匹配 |
| * | 匹配上一个元素零次或多次 | \d*\.\d | ".0","19.9"和"219.9" |
| + | 匹配上一个元素一次或多次 | "be+" | "been"和"bee","bent"和"be" |
| ? | 匹配前面的元素零次或一次 | "rai?n" | "ran"和"rain" |
| {n} | 匹配上一个元素恰好n次 | ",\d{3}" | "1.043.6"中的.043 |
| {n,} | 匹配上一个元素至少n次 | "\d{2,}" | "166","29"和"1930" |
| {n,m} | 匹配上一个元素至少n次,但不多于m次 | "\d{3,5}" | "166","16546","132654"中的13265 |
非贪婪字符就是贪婪字符后面加“?”号,如下表:
| 限定符 | 描述 | 模式 | 匹配 |
| *? | 匹配上一个元素零次或多次,但次数尽可能少 | \d*?\.\d | ".0","19.9"和"219.9" |
| +? | 匹配上一个元素一次或多次,但次数尽可能少 | "be+?" | "been中的"be",bent"中的"be" |
| ?? | 匹配上一个元素零次或一次,但次数尽可能少 | "rai??n" | "ran"和"rain" |
| {n}? | 匹配前导元素恰好 n 次 | ",\d{3}?" | "1.043.6"中的.043 |
| {n,}? | 匹配上一个元素至少 n 次,但次数尽可能少 | "\d{2,}?" | "166","29"和"1930" |
| {n,m}? | 匹配上一个元素的次数介于 n 和 m 之间,但次数尽可能少 | "\d{3,5}?" | "166","16546","132654"中的"132","654" |
十、优先级顺序
| 运算符 | 描述 |
|---|---|
| \ | 转义符 |
| (), (?:), (?=), [] | 圆括号和方括号 |
| *, +, ?, {n}, {n,}, {n,m} | 限定符 |
| ^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | | 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 |
十一、需要转义的特殊字符小结

误区:
|
替换 |
说明 |
|
$number |
包括替换字符串中的由 number 标识的捕获组所匹配的最后一个子字符串,其中 number 是一个十进制值。 |
|
${ name } |
包括替换字符串中由 (?<name> ) 指定的命名组所匹配的最后一个子字符串。 |
|
$$ |
包括替换字符串中的单个“$”文本。 |
|
$& |
包括替换字符串中整个匹配项的副本。 |
|
$` |
包括替换字符串中的匹配项前的输入字符串的所有文本。 |
|
$' |
包括替换字符串中的匹配项后的输入字符串的所有文本。 |
|
$+ |
包括在替换字符串中捕获的最后一个组。 |
|
$_ |
包括替换字符串中的整个输入字符串。 |

浙公网安备 33010602011771号