常用的正则表达式字符集,以及正则表达式中的贪婪匹配和非贪婪匹配。
一. 基础正则表达式字符集
RE字符 | 描述 | 例子 |
---|---|---|
. | 匹配任意字符,不能匹配换行符 | 查找e e, eee, e任意一个字符e,但不能是ee:grep -n “e.e” regular.txt |
* | 重复零个到无穷多个的前一个RE字符 | 找出含有es, ess, esss等字符串:grep -n “ess*” regular.txt |
? | 零个或一个的前一个RE字符 | 查找gd, god这两个字符串:grep -n “go?d” regluar.txt |
^word | 待查找的字符串(word)在行首 | 查找行首为 # 开始的那一行:grep -n “^#” regular.txt |
Word$ | 待查找的字符串(word)在行尾 | 将行尾为 ! 的那一行打印出来:grep -n “!$” regular.txt |
\ | 转义字符,将特殊符号的特殊意义去除 | 查找含有单引号 ‘ 的那一行:grep -n “'“ regular.txt |
[list] | 字符集合的RE字符,里面列出想要选取的字符 | 查找含有gl或gd的那一行:grep -n “g[ld]” regular.txt |
[n1-n2] | 字符集合的RE字符,里面列出想要选取的字符范围 | 查找含有任意数字的那一行:grep -n “[0-9]” regular.txt |
[^list] | 字符集合的RE字符,里面列出不想要选取的字符串或范围 | 查找字符串可以是oog, ood, 但不能是oot:grep -n “oo[^t]“ regular.txt |
{n, m} | 连续n到m个的【前一个RE字符】 | 在g与g之间有2个到3个的o存在的字符串,亦即goog, gooog:grep -n “go{2, 3}g” regular.txt |
{n} | 连续n个的前一个RE字符 | |
{n, } | 连续n个以上的前一个RE字符 |
二. 扩展正则表达式字符集
RE字符 | 描述 | 例子 |
---|---|---|
+ | 重复【一个或一个以上】的前一个RE字符 | 查找god, good, goood等字符串:grep -n “go+d” regular.txt |
\ | 用或(or)的方式找出数个字符串 | 查找gd或good这两个字符串:grep -n “gd|good” regular.txt |
( ) | 找出【群组】字符串 | 查找glad或good这两个字符串,因为g和d是重复的,所以可以将la和oo列于( )中,并以|来分隔:grep -n “g(la|oo)d” regular.txt |
( )+ | 多个重复群组的判别 | 查找开头是A结尾是C,中间有一个以上的”xyz”字符串:grep -n “A(xyz)+C” |
三. 贪婪和非贪婪模式
1. 什么是贪婪和非贪婪模式
如:
1 | string str = "abcaxc"; |
- 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式
p1
匹配字符串str
,结果就是匹配到:abcaxc
使用的是(ab.*c)
。 - 非贪婪匹配:就是匹配到结果就好,最少的匹配字符。如上面使用模式
p2
匹配字符串str
,结果就是匹配到:abc
使用的是(ab.*?c)
。
2. 编程中如何区分两种模式
==默认是贪婪模式;在量词后面直接加上一个问号 ?就是非贪婪模式。==
如:A(.*?)C,使用非贪婪模式匹配获取以A开头C结尾,中间有任意多个任意字符的字符串。
量词:{m,n}:m到n个
. :任意多个
+:一个到多个
?:0或一个
四、正则表达式结果取反
1 | ^((?!你的正则表达式).)*$ // 选择不是你的正则表达式匹配的行 |
五、正则表达式工具网站
- 本文作者: 路痴的兔子
- 本文链接: https:/proudrabbit.gitee.io/正则表达式.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!