聊聊正则表达式

  什么是正则表达式?A regular expression is a set of characters that specify a pattern。顾名思义正则表达式是用于匹配固定模式的字符串的一种表达方式。正则表达式分很多种,Linux环境下不同的工具对所支持的正则表达式类型也有所不同。我们参考wiki(https://en.wikibooks.org/wiki/Regular_Expressions)给出的正则表达式类型,不讨论那些马上废弃和日常运维时非常少见的类型,主流的分类有:

  • Basic Regular Expression

  不严格的区分的话,可以和POSIX Basic Regular Expression看做一回事,主要用于Unix下的命令行工具,比如grep、sed的默认匹配方式

  • Extended Regular Expression

  更加高级的扩展,可以被grep通过-E调用,被sed通过-r调用,是awk的默认支持模式

  • Shell Regular Expressions

  用于Unix中普通命令对于文件名的匹配

BRE和ERE

  这俩种表达式在大部分情况下其实是相同的(除去使用符号"\"特殊标注的):

参数 功能
. 点号,匹配任意单个字符
[ ] 匹配指定范围内的任意单个字符,如[a-z]小写字母、[a-Z]全字母
[^ ] 过滤掉指定范围内的任意单个字符,如[^a-z]非小写字母
* X*匹配前面的字符任意次(包含0次)
.* .和*组合使用,表示匹配任意字符任意长度(包含0次)
^ 定位到头部,或^XXX匹配以XXX开头的字符串
$ 定位到尾部,或XXX$匹配以XXX结尾的字符串
^$ ^和$组合使用,匹配空白行
BRE:\{n\} X\{n\}精确匹配前面的字符出现的次数(n次)
ERE:{n} X{n}精确匹配前面的字符出现的次数(n次)
BRE:\{m,\} 前面的字符至少出现m次
ERE:{m,} 前面的字符至少出现m次
BRE:\{m,n\} 前面的字符出现m到n次之间
ERE:{m,n} 前面的字符出现m到n次之间
BRE:\{,n\} 匹配最多n次
ERE:{,n} 匹配最多n次
BRE:\+ 前面的字符出现1次或者多次,如ab\+c表示"abc","abbc"等
ERE:+ 前面的字符出现1次或者多次,如ab+c表示"abc","abbc"等
BRE:\? 前面的字符出现0次或者1次,如ab\?c表示"ac"或者"abc"
ERE:? 前面的字符出现0次或者1次,如ab?c表示"abc"或者"abbc"
BRE:\(\) 子块,比如\(ab\)* 可以表示 "", "ab", "abab", "ababab"等
ERE:() 子块,比如(ab)* 可以表示 "", "ab", "abab", "ababab"等
BRE:\| 或关系,比如abc\|def表示"abc"或者"def"
ERE:| 或关系,比如abc|def表示"abc"或者"def"

SRE

  这种表达式支持的扩展非常少,只适合Unix下Shell环境里匹配文件名称

参数 功能
? 问号,匹配任意单个字符
[ ] 匹配指定范围内的任意单个字符
[! ] 过滤掉指定范围内的任意单个字符
* 匹配前面的字符任意次(包含0次)

  SRE除去上面这几种,还有?(pattern-list)、*(pattern-list)、+(pattern-list)、@(pattern-list)、!(pattern-list)这些用的不是很多的表达式。


发表评论

评论列表,共 0 条评论

    暂无评论