正则表达式
元字符: 正则表达式中具有特殊意义的专用字符。
正则元字符
- 特殊字符
- 空白符
- 范围
- 量词
- 断言
特殊字符
- . (英文的点) 表示换行以外的任意个字符
- \d 任意数字 \D 任意的非数字
- \w(小写) 任意字母、数字、下划线(不包含空格)
- \W(大写) 任意非字母、数字、下划线
- \s 任意空白符
- \S(大写) 任意的非空白符
空白符
- \r 回车符
- \n 换行符
- \f 换页符
- \t 制表符
- \v 垂直制表符
- \s 任意空白符
量词
- *: 0到多次
- +: 1次到多次
- ?: 0到1次
- {m}: 出现m次
- {m,}: 出现至少m次
- {m,n}: m到n次
范围
- |或,: 如love|live代表love或live
- []多选一: 括号中任意个元素
- [a-z]: 匹配a到z之间任意单个元素
- [^…]: 不能是括号中的任意单个元素(^ 脱字符)
贪婪模式
尝试尽可能最大长度去匹配
非贪婪模式
量词后面加 ?:匹配长度最小满足要求的
独占模式(量词后加+)
独占模式与贪婪模式类似,尽可能多的去匹配,如果匹配失败就结束,不会进行回溯
例子
正则 | 文本 | 结果 | |
---|---|---|---|
贪婪模式 | a{1,3}ab | aaab | 匹配 |
非贪婪模式 | a{1,3}?ab | aaab | 匹配 |
独占模式 | a{1,3}+ab | aaab | 不匹配 |
脱字符(^)代表正则开头,美元符号($)代表结尾
分组
- 使用括号将多个元字符组成的部分括起来,将括号内的元字符当作一个整体。
- ”复用",就是引用之前出现过的分组。
- 不保存子组,在括号内使用 ?: 可以提高正则的性能。
- 分组命名:使用 (?P<分组名>正则)
- 分组引用: \number 或者 $number