参考:
1、https://www.cnblogs.com/EasonJim/p/8282511.html
2、https://baijiahao.baidu.com/s?id=1711110960497011300&wfr=spider&for=pc
3、https://blog.51cto.com/u_14451009/2441677
基本表达式的分类
基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称BREs)
扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称EREs)
Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称PREs)
基本表达式
正则表达式 | 说明 | 实例 | Basic RegEx | Extended RegEx | python RegEx | Perl regEx |
---|
\ | 转义符,将特殊字符进行转义,忽略其特殊意义 | a.b匹配a.b,但不能匹配a.b,"."被转义为特殊意义 | \ | \ | \ | \ |
. | 匹配除换行符(‘\n’)之外的任意单个字符(必须存在)(注意:awk 指令中的句点能匹配换行符) | a…b可以表示acdb、aaab 、abbbb但不可以表示acb、ab、aba等 | . | .(如果要匹配包括“\n”在内的任何一个字符,请使用:‘(^$)|(.)’ | . | .(如果要匹配包括“\n”在内的任何一个字符,请使用 ‘[\n]’ |
* | 要和通配符区分开,匹配 * 前面一个字符的0个或多个,(没有1个);*后面的字符一要在*前面字符的后面 ;另外*前后字符必须相邻否则匹配不到(如:a*b匹配ab) | a*b可以表示ab、aab、b、abababab,但不可以表示acb、ba等;acb只会匹配到b,也就是视为b前面有0个a;ba也只会匹配到b,同样视为b前面有0个a | * | * | * | * |
^ | 匹配行首,例如’^dog’匹配以字符串dog开头的行(注意:awk 指令中,'^'则是匹配字符串的开始) | 输入:echo -e "abcd \naccc" | grep "^ab" ;输出:abcd | ^ | ^ | ^ | ^ |
$ | 匹配行尾,例如’cat$‘匹配以字符串cat结尾的行(注意:awk 指令中,’$'则是匹配字符串的结尾) | 输入:echo -e "abcd \naccc" | grep "cc$" ;输出:accc | $ | $ | $ | $ |
[] | 表示范围,可以用来进行模糊匹配常用选项为[a-z]、[0-9] | 1. grep[0-9] text 过滤出含数字的行;2. grep[a-z] text 过滤出含小写字母的行;3. grep [abc] text 过滤出含有a,b,c的行(注意这个abc是分别匹配,也就是相当于匹配含有a的行,b的行,c的行,并不是字符串abc的行) | [] | [] | [] | [] |
[^] | 负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:‘[^abc]’ 可以匹配 “Lay” 中的’L’(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符) | echo -e "abc def lmn" | grep [^f-z] ;输出 abc def lmn,只有[a-e] 配匹配到 | [^] | [^] | [^] | [^] |
? | 匹配前面的子表达式 0 次或 1 次(等价于{0,1}) | echo -e "a ab abc ac abbc" | egrep ab?c ;输出:a ab abc ac abbc (即,匹配ac,abc) | 不支持(同\?) | ? | ? | ? |
+ | 匹配前面的子表达式 1 次或多次(等价于{1, }),例如:zo+能匹配 "zo"以及 “zoo”,但不能匹配 “z” | echo -e “wd wod wood wooood” | egrep wo+d ;输出为:“wd wod wood wooood” | 不支持(同\+) | + | + | + |
() | 匹配表达式,用于创建一个用于匹配的字符串 | echo -e "tast test tst" | egrep -n 't(a|e)st' ;输出:tast test tst。 | 不支持(但可以使用\(…\),如:\(dog\) | () | () | () |
{n} | n 必须是一个 0 或者正整数,匹配子表达式 n 次. | echo -e "tast test tte ass" | egrep -n [st]{2} ;匹配输出结果为:“tast test tte ass” | 不支持(同\{n\}) | {n} | {n} | {n} |
{n,} | 匹配子表达式的匹配次数必须大于等于 n次,即至少匹配n次。 | echo -e "tast test tte ass" | egrep -n "s{2,}" ;输出为:“tast test tte ass” | 不支持(同\{n,\}) | {n} | {n} | {n} |
{n,m} | 匹配子表达式的匹配次数必须大于等于 n次,最多匹配m次。且需要满足你n<=m。 | echo -e "aaa ass" | egrep -n "a{2,3}" ;输出:aaa ass。 | 不支持(同\{n,m\}) | {n,m} | {n,m} | {n,m} |
| | 交替匹配两边的任意一项,类似于逻辑“或”运算。 | echo -e "aaa aas ass abc" | egrep -n "a(a|s)s" ;输出为:aaa aas ass abc。 | 不支持(同x\|y) | | | | | | |
POSIX字符类
正则表达式 | 说明 | 实例 | Basic RegEx | Extended RegEx | python RegEx | Perl regEx |
---|
[:alnum:] | 匹配任何一个字母或数字([A-Za-z0-9]),例如:'[[:alnum:]] ’ | echo -e "abc 123" | grep '[[:alnum:]]' ; 输出:abc 123 | [:alnum:] | [:alnum:] | [:alnum:] | [:alnum:] |
[:alpha:] | 匹配任何一个字母([A-Za-z]), 例如:’ [[:alpha:]] ’ | echo -e "abc 123" | grep '[[:alpha:]]' ; 输出:abc 123 | [:alpha:] | [:alpha:] | [:alpha:] | [:alpha:] |
[:digit:] | 匹配任何一个数字([0-9]),例如:'[[:digit:]] ’ | echo -e "abc 123" | grep '[[:digit:]]' ;输出为:abc 123 | [:digit:] | [:digit:] | [:digit:] | [:digit:] |
[:lower:] | 匹配任何一个小写字母([a-z]), 例如:’ [[:lower:]] ’ | echo -e "abc ABC 123" | grep '[[:lower:]]' ; 输出:abc ABC 123 | [:lower:] | [:lower:] | [:lower:] | [:lower:] |
[:upper:] | 匹配任何一个大写字母([A-Z]),例如:‘[[:upper:]]’ | echo -e "abc ABC 123" | grep '[[:upper:]]' ; 输出:abc ABC 123 | [:upper:] | [:upper:] | [:upper:] | [:upper:] |
[:space:] | 任何一个空白字符: 支持制表符、空格,例如:’ [[:space:]] ’ | echo -e "abc ABC 123" | grep '[[:space:]]' ;输出为:abc ABC 123 | [:space:] | [:space:] | [:space:] | [:space:] |
[:blank:] | 空格和制表符(横向和纵向),例如:‘[[:blank:]]‘ó’[\s\t\v]’ | echo -e "abc ABC 123" | grep '[[:blank:]]' ; 输出为:abc ABC 123 | [:blank:] | [:blank:] | [:blank:] | [:blank:] |
[:graph:] | 任何一个可以看得见的且可以打印的字符(注意:不包括空格和换行符等),例如:'[[:graph:]] ’ | echo -e "abc ABC 123" | grep '[[:graph:]]' ; 输出:abc ABC 123 | [:graph:] | [:graph:] | [:graph:] | [:graph:] |
[:print:] | 任何一个可以打印的字符(注意:不包括:[:cntrl:]、字符串结束符’\0’、EOF 文件结束符(-1), 但包括空格符号),例如:'[[:print:]] ’ | echo -e "abc ABC 123" | grep '[[:print:]]' ;输出:abc ABC 123 | [:print:] | [:print:] | [:print:] | [:print:] |
[:cntrl:] | 任何一个控制字符(ASCII 字符集中的前 32 个字符,即:用十进制表示为从 0 到31,例如:换行符、制表符等等),例如:’ [[:cntrl:]]’ | echo -e "abc ABC 123 \t 123" | grep '[[:cntrl:]]' ;输出:abc ABC 123 123 | [:cntrl:] | [:cntrl:] | [:cntrl:] | [:cntrl:] |
[:punct:] | 任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]这些字符集) | echo -e "abc.ABC?123+123" | grep '[[:punct:]]' ; 输出:abc‘.’ABC’?‘123’?'123 | [:punct:] | [:punct:] | [:punct:] | [:punct:] |
[:xdigit:] | 任何一个十六进制数(即:0-9,a-f,A-F) | echo -e "abc ABC 129 XYZ" | grep '[[:xdigit:]]' ; 输出:abc ABC 129 XYZ | [:xdigit:] | [:xdigit:] | [:xdigit:] | [:xdigit:] |
元字符
正则表达式 | 说明 | 实例 | Basic RegEx | Extended RegEx | python RegEx | Perl regEx |
---|
\b | 匹配一个单词边界,也就是指单词和空格间的位置,例如: ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的’er’ | \bcool\b匹配cool,不匹配coolant | \b | \b | \b | \b |
\B | 匹配非单词边界,例如:‘er\B’ 能匹配 “verb” 中的’er’,但不能匹配"never" 中的’er’ | cool\B匹配coolant,不匹配cool | \B | \B | \B | \B |
\w | 匹配包括下划线的任何单词字符(等价于[A-Za-z0-9_]) | \w匹配1或a,不匹配& | \w | \w | \w | \w |
\W | 匹配任何非单词字符 (等价于[^A-Za-z0-9_]) | \W匹配&,不匹配1或a | \W | \W | \W | \W |
\d | 匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9]) | b\db匹配b2d,不匹配bcd | 不支持 | 不支持 | \d | \d |
\D | 匹配非数字字符(等价于 [^0-9]) | b\Db匹配bcd,不匹配b2b | 不支持 | 不支持 | \D | \D |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v]) | x\s匹配x x x,不匹配xx | 不支持 | 不支持 | \s | \s |
\S | 匹配任何非空白字符(等价于[^\f\n\r\t\v]) | x\Sx匹配xkx,不匹配x x | 不支持 | 不支持 | \S | \S |
\n | 匹配一个换行符(等价于 \x0a 和\cJ) | \n匹配一个换行符 | 不支持 | 不支持 | \n | \n |
\r | 匹配一个回车符(等价于 \x0d 和\cM) | \r匹配回车 | 不支持 | 不支持 | \r | \r |
\t | 匹配一个横向制表符(等价于 \x09和 \cI) | \t 匹配一个横向制表符 | 不支持 | 不支持 | \t | \t |
\v | 匹配一个垂直制表符(等价于 \x0b和 \cK) | \v匹配一个垂直制表符 | 不支持 | 不支持 | \v | \v |
\f | 匹配一个换页符(等价于\x0c 和\cL) | \f匹配一个换页符 | 不支持 | 不支持 | \f | \f |
\\ | 匹配转义字符本身"\" | \匹配一个转义符 | \\ | \\ | \\ | \\ |