一、REGEXP 正则表达式
一类特殊字符及文本字符编写的模式,有些字符(元字符)不表示字符字面意思,而表示控制或通配的功能
程序支持:grep,sed,awk,vim,less,nginx,varnish等
两类:
基本正则表达式:BRE
扩展正则表达式:ERE
元字符分类:字符匹配,匹配次数,位置锚定,分组
1、基本正则表达式元字符
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和任意数字
[:alpha:] 代表任何英文大小写字符,即A-Z,a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符
[:cntrl:] 不可打印的控制字符(退格,删除等)
[:digit:] 十进制数字 [:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
2、匹配次数
用在要指定次数的字符后面,指定前面字符要出现的次数
* 匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少一次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至多n次
3、位置锚定
定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$,用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\<或\b词首锚定,用于单词模式的左侧
\>或\b词尾锚定,用于单词模式的右侧
\<PATTERN\>,匹配整个单词
4、分组
\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为\1,\2,\3,....
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:\(string1\+\(string2\)*\)
\1 string1\+\(string2\)*
\2 string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
示例:a\|b:a或b C\|cat:C或cat \(C\|c\)at:Cat或cat
二、扩展正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE…]
扩展正则表达式的元字符
1、字符匹配
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
2、次数匹配
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m次,至多n次
3、位置锚定
^ 行首
$ 行尾
\<,\b 语首
\>,\b 语尾
4、分组
()
后向引用 \1,\2
或者
a|b a或b
C|cat C或cat
(C|c)at Cat或cat