之前学过一遍正则表达式,结果好久不用基本上忘了,每次用都得重新打开网页搜索下;由于网上讲的参差不齐,还是自己总结下吧。
大家都推荐这本书: 精通正则表达式 第3版
1 特殊作用
大写往往代表对小写能匹配的字符取补集
[_a-zA-z0-9]
: 中括号的作用——匹配中括号内任意一种(连字符-
只有放在字符组开头时才不表示范围)(\d))
: 小括号创建一个捕获分组,也可用来决定竖线的作用范围(?:the|The|THE)
: 非捕获分组,无法后向引用(效率高),解决使用小括号的副作用(?=pattern)
: 非捕获匹配,正向肯定查找;如Windows(?=95|98|NT|2000)
能匹配Windows2000
中的Windows
;类似方向相反但作用相同的为(?<=pattern)
(?!pattern)
; 非捕获匹配,正向否定查找;如Windows(?!95|98|NT|2000)
能匹配Windows3.1
中的Windows
;类似方向相反但作用相同的为(?<!pattern)
(?=...)
: 这一类表达式都可以看作一个“空位”,它们本身不占用字符(\d)\d\1
: 其中\1
表示引用前面分组中的内容,如该表达式可匹配707
; 或者有时用$1
这种形式也可\
: 转义符, 如\(
表示匹配左括号本身^
: 行起始位置(或整个文档的开头);$
: 行结束位置 (锚位符)$
: 行或字符串的结尾位置;和^
一样都不占用字符[^\d]
: 当^
放在中括号里时表示对该中括号里的匹配内容取反(匹配单个未列出的字符)|
: 并集,多个选项中选择一个.如(the|The|THE)
[a-z] [^m-r]
: 交集,空格表示“且”,该式表示匹配a到z之间但不包含m到r间的字符.*?
: 非贪婪匹配的一个组合形式,类似的?
字符还可以跟在*,+,?,{n},{n,},{n,m}
后表示非贪婪匹配
2 表示数量
\d{3}
: 花括号为量词,数字表明出现几次,可以有多个选项如:\d{3,4}
,匹配3位或4位数字*
: 量词,出现次数大于等于0(贪婪) 相当于{0,}
+
: 量词,出现次数大于等于1 相当于{1,}
?
: 量词,0个或1个(懒惰) 相当于{0,1}
3 数字
[0-9]
: 匹配单个数字, 相当于\d
[01357]
: 匹配列出的数字中的一个\D
: 匹配一个非数字字符
4 其他
.
: 匹配任意字符,但好像有的版本没把换行符算进去,这时可用(.|\n)
表示任意字符\w
: 匹配字母、数字和下划线\s
: 空白字符,一共四种,相当于[ \t\n\r]
;空格、制表符、换行符、回车符\b
: 匹配单词边界,不消耗字符(零宽度断言),如\b\w{7}\b
5 正则表达式小工具Reg_Exper-Tester
自己结合别人的代码揉合的一个正则表达式测试以及可视化的工具,感觉还是挺有用的,比网上80%的正则表达式工具都要好吧,不然就不需要我重新做一个了。
Demo: < https://chengpengzhao.com/Reg_Exper-Tester/ >