参考资料
- 视频地址:10分钟快速掌握正则表达式
- GitHub 教程:Learn Regex
- 正则表达式在线测试工具: https://regex101.com/
限定符 Quantifiers
限定一个字符
{}
中写上数字表示匹配到前面字符的准确位数
举例:ab{5}c
可以匹配 abbbbbc
也可以写入一个范围如 ab{3,5}c
可以匹配 abbbc, abbbbc, abbbbbc
如果省略表示范围上限的数字,可以匹配下限以上数字的项目
?
代表前一位字符出现 0 次或 1 次(可有可无),相当于 {0,1}
举例:used?
可以匹配 use 和 used
*
匹配 0 个或多个前一位字符,相当于 {0,}
举例:ab*c
可以匹配 ac,abc,abbbbbc
+
匹配出现一次以上的字符,相当于 {1,}
举例:ab+c
可以匹配 abc,abbbbbc
匹配多个字符
用 ()
将需要查找的多个字符组合在一起再添加限定符
或运算 OR Operator
|
举例:a (cat|dog)
(注意有空格)可以匹配 a cat 和 a dog
字符类 Character Classes
[abc]
等价于 (a|b|c)
方括号中可以指定字符的范围
举例:
[a-z]
代表所有小写英文字母
[a-zA-Z]
代表所有英文字母
[a-zA-Z0-9]
代表所有英文字母和数字
如果在方括号里最前面加上^符号,如 [^0-9]
代表所有非数字字符
元字符 Meta-characters
\d
数字字符\D
非数字字符\w
单词字符\W
非单词字符\s
空白符(包含 Tab 和换行符)\S
非空白符.
表示除换行符外的任意字符^
写在要匹配的字符前,匹配行首,$
写在要匹配的字符后,匹配行尾
贪婪匹配 Greedy Match 与懒惰匹配 Lazy Match
如 <.+?>
可以匹配单个 html 标签,避免从第一个标签开头匹配到最后一个标签末尾
实例
- 十六进制颜色值匹配
#[a-fA-F0-9]{6}\b
,\b
代表单词字符的边界 - IPv4 地址匹配
\d+\.\d+\.\d+\.\d+
句点前的\
为转义符,改良\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
待学习:
- 捕获 Capturing
- 断言 Lookbehind Assertions
- 递归 Recursion
- 平衡组 Balancing Groups