正则表达式
特殊字符 | 描述 | 例子字符串 | 正则式 | 结果 |
---|---|---|---|---|
^ | 匹配输入字符串的开始位置 | “Hello World” | ^Hello | Hello |
$ | 匹配输入字符串的结束位置 | “Hello World” | World$ | World |
? | 0次或1次 | “Helllllllo” | Hel?o | Helo |
* | 0次或多次 | “Helllllllo” | Hel*o | Helllllllo |
+ | 1次或多次 | “Helllllllo” | Hel*o | Helllllllo |
. | 匹配除换行符之外的任何单个字符 | “Helllllllo” | .+ | Helllllllo |
| | 或 | “Hello,World” | Hello( |,)World | Hello,World |
{n} | 匹配确定的n次 | “Helllo” | Hel{3}o | Helllo |
{n,} | 至少匹配n次 | “Helllllllo” | Hel{3,}o | Helllllllo |
{n, m} | 至少匹配n次,至多匹配m次 | “Helllllllo” | Hel{1,10}o | Helllllllo |
\b | 匹配单词边界 | “Hello World” | llo\b \bWor | llo Wor |
\B | 反义,匹配非单词边界 | “Hello World” | ell\B | Hello |
\d | 匹配数字 | 0737-5686123 | \d{4}-\d{6} | 0737-568612 |
\D | 反义,匹配非数字 | “Hello World” | \D+ | Hello World |
\w | 匹配字母、数字、下划线 | hello_world777 | \w+ | hello_world777 |
\W | 反义,匹配非字母、数字、下划线 | 0737—5686123 | \W+ | — |
\s | 匹配空格 | “Hello World” | Hello\sWorld | Hello World |
\S | 反义,匹配非空格 | “hello_world” | hello\Sworld | hello_world |
[0-9] | 字符组,匹配中括号内存在的字符 | “5686123” | [0-9]+ | 5686123 |
[^0-9] | 反义,匹配括号内以外的字符 | “5686xxx123” | [^0-9]+ | xxx |
捕获分组
- 用圆括号将一个正则表达式模式或部分模式括起来,会使相关匹配存储到一个临时缓冲区中
- 所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,比如 \1 访问第一个缓存区
例如:正则 (\w+)/b/s/1
,对于 “Hello Hello” ,第一个 (\w+) 捕获到的字符Hello,/1 访问第一个缓存区,同样匹配 Hello,于是结果为 “Hello Hello”,而 “Hello World” 则无法匹配
不捕获分组
非捕获分组,与捕获分组的区别在于,该匹配不需要捕获后存储供以后使用。
-
(?:pattern)
?:
标明该分组是非捕获分组,没有其他含义。在使用或字符 “( | )” 来组合一个模式的各个部分是很有用。
例如:industr(?:y|ies)
相对industry|industries
更简略 -
(?=pattern)
?=
除表示非捕获分组外,有正常肯定预查的功能,在任何匹配 pattern 的字符串开始处匹配字符串。即如果后边是 pattern 则匹配。
例如,Windows(?=95|98|NT|2000)
能匹配 “Windows2000” 中的 “Windows”,但不能匹配 “Windows3.1” 中的 “Windows”。 -
(?!pattern)
?!
非捕获分组,正向否定预查,在任何不匹配 pattern 的字符串开始处匹配字符串。即如果后面不是 pattern 则匹配
例如:Windows(?!95|98|NT|2000)
能匹配 “Windows3.1”中的“Windows”,但不能匹配 “Windows2000” 中的 “Windows” 。 -
(?<=pattern)
?<=
非捕获分组,反向肯定预查,与正向肯定预查类似,但是方向相反。即如果前面是 pattern 则匹配。
例如,(?<=95|98|NT|2000)Windows
能匹配 “2000Windows” 中的 “Windows”,但不能匹配 “3.1Windows” 中的 “Windows”。 -
(?<!pattern)
?<!
非捕获分组,反向否定预查。即**如果前面不是 pattern 则匹配。
例如,(?<=95|98|NT|2000)Windows
能匹配 “3.1Windows” 中的 “Windows”,但不能匹配 “2000Windows” 中的 “Windows”。
例子参考:https://www.cnblogs.com/allen2333/p/9835654.html