目录
1. 高频用法
Mode | Comments |
[abc] | 匹配 "a"、"b"、"c" 其中任何一个字符。 |
[a-d1-4] | 匹配 "a"、"b"、"c"、"d"、"1"、"2"、"3"、"4" 其中任何一个字符。 |
[^abc] | 匹配除了 "a"、"b"、"c" 之外的任何一个字符。 |
[^a-d1-4] | 匹配除了 "a"、"b"、"c"、"d"、"1"、"2"、"3"、"4" 之外的任何一个字符。 |
. | 通配符,匹配除了少数字符(\n)之外的任意字符。 |
\d | 匹配数字,等价于 [0-9]。 |
\D | 匹配非数字,等价于 [^0-9]。 |
\w | 匹配单词字符,等价于 [a-zA-Z0-9_]。 |
\W | 匹配非单词字符,等价于 [^a-zA-Z0-9_]。 |
\s | 匹配空白符,等价于 [ \t\v\n\r\f]。 |
\S | 匹配非空白符,等价于 [^ \t\v\n\r\f]。 |
(?=…) | 非捕获组 – 向前断言. 例如’(.*)(?=ton)’ 表达式,当 遇到’Appleton’字符串时,会匹配为’Apple’. |
(?<=…) | 非捕获组 – 向后断言. 例如’(?<=sir) (.*)’ 表示式,当遇到’sir William’ 字符串时,匹配为’ William’. |
常用组合 | |
.*\d+ | 必须包含数字 |
.*[a-zA-Z] | 必须包含英文 |
^.{8,12}$ | 字符串长度是8-12位 |
2.正则表达式之注释
语法:
(?#comment)
eg:
^(begin|end)$(?#注释:搜索某行只有"begin"或者"end"的字符串)
3.正则表达式之零宽断言
(Tips:下述pattern可以是正则表达式,也可以是字符串或字符)
3.1 向右(前)肯定断言
(?=pattern):断言自身出现的位置的后面能匹配表达式pattern。
Ex1:
\b\w+(?=ing\b), 匹配以ing结尾的单词的前面的不包含ing的部分,如查找 sleeping和cooking,它会匹配出sleep和cook.
Ex2:
d2(?=HH) 即从左向右查看文本,如果当前位置字符串(或字符,或正则表达式)d2匹配成功(即条件1),就查看右侧文本是否满足断言条件(即条件2),当条件1与条件2都成立时就匹配成功。
hello-world2HH123 匹配结果为:d2
注:d2(?=HH)该表达式右侧不能有其他任何内容,否则表达式无效
3.2 向左(后)肯定断言
(?<=pattern) :断言自身出现的位置的前面能匹配表达式pattern。
Ex1:
(?<=\\)", 匹配所有被\转义过的双引号
Ex2:
(?<=[A-Z])\d{3} 从左向右查看文本,如果当前位置的左侧能与表达式(?<=[A-Z])匹配成功(即条件1),就进入下一个表达式\d{3}的匹配(即条件2)。当条件1与条件2都成立时就匹配成功。
Line: hello-world2HH123
Line2: hello-world2HH12
匹配结果为:只有Line1的123被匹配
3.3 向右(前)否定断言
(?!pattern) :断言自身出现的位置的后面不匹配表达式pattern。
比如 \b\w+(?!=,), 匹配所有不以","结尾的单词的部分
3.4 向左(后)否定断言
(?<!pattern) :断言自身出现的位置的前面不匹配表达式pattern。
比如 (?<!\\)", 匹配所有没有被\转义过的双引号
4. NotePad++中替换操作
使用正则表达式的标记,通过()来包围想要用的字符,然后用\1 来替换字符串,第一个匹配文本。
文本 | Search string | Replace string | Result |
---|---|---|---|
Hi my name is Fred | my name is (.+) | my name is not \1 | Hi my name is not Fred |
The quick brown fox jumped over the fat lazy dog | brown (.+) jumped over the (.+) | brown \2 jumped over the \1 | The quick brown fat jumped over the fox lazy dog |
参考文献:
【1】菜鸟教程-正则表达式
【2】https://www.w3cschool.cn/regex_rmjc/regex_rmjc-iw3q28cq.html