一、基本语法概览
表达式 | 说明 |
---|---|
. | 匹配除分行符外的任意一个字符 |
? | 匹配前面表达式零次或一次或指明一个非贪婪限定符 |
* | 匹配前面表达式零次或多次 |
+ | 匹配前面表达式一次或多次 |
\w | 匹配任意一个单词字符 |
\W | 匹配任意非一个单词字符 |
\d | 匹配任意一个数字字符 |
\D | 匹配任意一个非数字字符 |
\s | 匹配任意一个空白字符,包括包括tab和换行符 |
\S | 匹配任意一个非空白字符 |
{3} | 匹配三个连续的前面表达式 |
{3,5} | 匹配三个到五个连续的前面表达式 |
{3,5} | 匹配三个以上连续的前面表达式 |
[] | 匹配 [] 内的任何一个字符。要指定字符的范围,请列出由短划线 (-) 分隔的起始字符和结束字符,如 [a-z] 中所示。 |
[^] | 匹配跟在 ^ 之后的不在字符集中的任意字符 |
^ | 将匹配字符串锚定到行首 |
$ | 将匹配字符串锚定到行尾 |
\b | 匹配一个单词边界,即字与空格间的位置 |
\B | 非单词边界匹配 |
() | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用 |
\1 | 对第一个子表达式的引用 |
$1 | 对第一个子表达式的替换 |
| | 或运算符 |
二、应用实例
1、匹配空格字符
(?([^\r\n])\s)
2、匹配行尾单词
\w+\r\n
3、贪婪模式和懒惰模式
贪婪模式
\".+\"
"dfdsf","dfsdf "贪婪模式会选中最两侧双引号之间的所有字符
懒惰模式
\".+?\"
"dfdsf","dfsdf "懒惰模式会分别选中两个字符串
- 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪或最小匹配。
4、匹配整数和小数
\b[0-9]*\.*[0-9]+\b
5、 反向引用
所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
\b([a-z]+) \1\b // 查找重复单词
6、先行断言和后行断言
1)零宽正向先行断言
exp1(?=exp2):查找 exp2 前面的 exp1
2)零宽正向后行断言
(?<=exp2)exp1:查找 exp2 后面的 exp1
3)零宽负向先行断言
exp1(?!exp2):查找后面不是 exp2 的 exp1
4)零宽负向后行断言
(?<!=exp2)exp1:查找前面不是 exp2 的 exp1
2 种后行断言有所限制,这个表达式必须是定长的,即不能使用 、+、? 等元字符,如 (?<=abc) 没有问题,但 (?<=abc) 是不被支持的。
三、参考文献
https://blog.csdn.net/qq_42667613/article/details/112983161
https://www.runoob.com/regexp/regexp-syntax.html