目录
第一节 正则表达式
第二节 Word的正则表达式
第一节 正则表达式
对于字符串“a5”,是由两个字符“a”、“5”以及三个位置组成的,这一点对于正则表达式的匹配原理理解很重要。
A 字符组
表达式 |
说明 |
能被匹配 |
不被匹配 |
[abc] |
匹配其中一个。那怕是符号字符。 |
a或c |
d或A |
[a-z] |
匹配任意一个小写字母,限升序。 |
a或x |
A或X |
[A-Z] |
匹配任意一个大写字母,限升序。 |
A或X |
a或x |
[0-9] |
匹配任意一个数字,限升序。 等价于[0123456789] |
0或1 |
a或x |
[u4e00-u9fa5] |
表示任意一个汉字 |
汉 |
a |
[a-zA-Z0-9] |
匹配任意一个字母或数字 |
A或0 |
+或@或_ |
[^a1<] |
匹配除此之外的字符(排除) |
B或2 |
1或< |
[^a-z] |
表示除小写字母外的任意一个字符 |
A或B |
a或b |
. |
匹配除换行符 的任何单个字符。 |
|
|
B 定位符
字符 |
描述 |
举例 |
^ |
从行首位置开始匹配。 |
^The:行开头为the/THE,但athe不是。 |
$ |
从行未位置检查匹配。 |
end$:行结尾为end/END,但enda不是。 |
B |
是否匹配一个词边界,各软件定义不一样的。 Notepad++中只有且和普通查找无区别。 |
C 限定选择符
字符 |
说明 |
举例 |
? |
匹配前面的子表达式0次或1次。 {0,1} |
ab?:匹配a或ab或abb。 |
* |
匹配前面的子表达式0次或任意多次。{0,} |
[^a]*:匹配b或ca,不是a或ab。 |
+ |
匹配前面的子表达式1次或任意多次。{1,} |
ds+d:两个数字中间至少有一个以上的空白字符。 |
| |
多个子表达式之间取“或”的关系; 如是字符串可书写任意长度。 |
(t|T)(h|H)等价[tT][hH] 等价(Th|tH|th|TH) Notepadd++不分大小写 |
( ) |
要匹配的表达式。 获取后可以反向引用(见捕获组)。 ()里可以放[]{},但[]{}里不能放() |
/^[a-zA-Z]{1}([a-zA-Z0-9]|[.@_]){4,19}$/ 以字母开头,可带数字小数点@下划线的长度5-20字符串的行。 ^[0-9]{1,20}$:仅1-20位的数字行。 |
[ ] |
定义匹配的字符范围,只能是单个字符。 | |
{ } |
前面子表达式的匹配长度。 | |
{m} |
匹配前面的子表达式m次 |
d{3}相当于ddd (abc){2}相当于abcabc |
{m,n} |
匹配前面的子表达式最少m次,最多n次 |
d{2,3}匹配2-3位的数字。 |
{m,} |
匹配前面的子表达式至少m次 |
[a-z]{8,}至少8位以上的字母 |
D 预定义字符集
小写是匹配,大写是不匹配。w字母数字下划线,d数字,s空白字符。
字符 |
描述 |
w |
任意一个字母或数字或下划线,相当于[a-zA-Z0-9_]。 |
W |
w取反,相当于[^a-zA-Z0-9_]。 |
d |
任意一个数字,相当于[0-9]。 |
D |
任意一个非数字字符,d取反,相当于[^0-9]。 |
s |
任意空白字符,相当于[ f v]。包含空格字符。 |
S |
任意非空白字符,s取反,相当于[^ f v]。 |
1). POSIX风格的预定义字符类
E 非打印字符
字符 |
描述 |
cx |
匹配由x指明的控制字符。 例如cM匹配一个Control-M或回车符,x的值必须为A-Z或a-z之一。 |
f |
匹配一个换页符。等价于x0c和cL。 |
|
匹配一个换行符。等价于x0a和cJ。 |
|
匹配一个回车符。等价于x0d和cM。 |
|
匹配一个制表符。等价于x09和cI。 |
v |
匹配一个垂直制表符。等价于x0b和cK。 |
F 转义字符
如果在正式表式中查找(正式表达工自身字符)时,前缀转义字符即可。
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。
转义字符: |
|
示例 |
匹配$字符:$ 匹配*字符:* 匹配+字符:+ 匹配.字符:. 匹配[字符:[ 匹配?字符:? 匹配/字符:/ 匹配字符:\ 匹配{字符:{ |
例外 |
在[]中不需要转义字符。 因为不会这样书写:^写成[^]、d-z写成[d-] |
/:在某些语言中表示正则表达式的开始或结束,而VBScript中使用“”做边界符。
G 模式修饰符
模式修饰符的作用是设定模式。也就是规定正则表达式应该如何解释和应用。
不同的语言都有自己的模式设置,PHP中的主要模式如表所示:
H 捕获组
表达式 |
说明 |
(Expression) |
普通捕获组,将子表达式Expression匹配的内容保存到以数字编号的组里 |
(?<name> Expression) |
命名捕获组,将子表达式Expression匹配的内容保存到以name命名的组里 |
12 |
对序号为1和2的捕获组的反向引用 |
k<name> |
对命名为name的捕获组的反向引用 |
查找:(t|T)(h|H) 替换:1(abc)2
描述:将th/TH单词替换为tabch/TabcH
第二节 Word的正则表达式
示例文: B123 A234 A123 And |
结果: A123 B123 A234 And |
查找: (<[!^13]*^13)(*)1 替换: 12 |
释义: ()为表达式,<为单词开头,[!^13]为排除分段符^p,1为第一个表达式
在正则表达式中以^13代替^p |