正则表达式总结

本文学习总结linux系统下的正则表达式;本文总结了朱双印的正则表达式成果。传送门

 


正则表达式总结:

 


一、匹配“行”:

---- 匹配行首字符串:“^” ; 举例: grep --color "^hello" re.txt //匹配以“hello”开头的行;

---- 匹配行尾字符串:“$”; 举例: grep --color "hello$" re.txt //匹配以 "hello"结尾的行;

 


二、匹配“词”:

---- 匹配“词首”:"  或者 < ";
---- ---- 举例: grep --color "hello" re.txt //匹配以hello开头的单词;

---- 匹配“词尾”:"  或者 > ";
---- ---- 举例: grep --color "hello>" re.txt //匹配以hello结尾的单词;

---- 匹配“单词”:" 或<> " ; //匹配完整单词 ;
---- ---- 举例:grep --color "" re.txt // 匹配单词hello;


---- 匹配“非单词边界”(字符边界)(非词首): " B "(含义:包含字符串,但不在词首);
---- ---- 举例:grep "Bhello" re.txt //匹配单词包含hello,但hello不在词首;

---- 匹配“非单词边界”(非词尾):" B "(含义:包含字符串,但不在词尾);
---- ---- 举例:grep "helloB" re.txt //匹配单词包含hello,但hello不在词首;

---- 说明:" B = [^] " // ^此符号含义为“非”;B 是以单个“字符”为边界;证。

-------- 举例:grep "BerB" re.txt // 匹配er既不在词首也不再词尾的字符串。匹配never,不匹配ever,eraser;

 


三、连续次数匹配:

---- 匹配字符连续出现n次的行: " {n} "
---- ---- 举例:grep "m{3}" re.txt //匹配m连续出现3次的行;

---- 匹配字符连续出现多次的行:" {n,m} ";//大括号之前的字符至少连续出现n次,最多连续出现m次。
---- ---- 举例:grep "o{2,3}" re.txt // 匹配字母o连续出现至少2次至多3次的行;

---- 连续出现的字符上不封顶:" {n,} " //至少出现n次;
---- ---- 举例: grep "o{3}" re.txt // 匹配至少连续出现3次o的行;

---- 连续出现的字符至多m次: " {,m} "
---- ---- 举例:grep "o{,3}" re.txt //匹配字符o出现0次~3次的行;

---- 匹配 *前字符 连续出现 任意次数(含0次):" * " ;
---- ---- 举例: grep "o*" re.txt //匹配o连续出现任意次数,含0次;

---- 匹配任意长度的字符串:" .* "
---- ---- 举例: grep "o.*" re.txt //匹配含有o的任意字符串;

---- 匹配任意单个字符: “ . ”
---- ---- 举例: grep "x.x" re.txt //匹配3个字符两边是x,中间是任意字符;

---- 前面的字符出现0次或1次:“ ? ”// 前面字符至多出现1次;
---- ---- 举例: grep "a?" re.txt // 匹配a至多出现一次的行;

---- 前面字符至少出现1次,多了不限:“ + ” //前面的字符至少出现一次;
---- ---- 举例: grep "u+" re.txt //匹配u至少出现1次的行;

 


四、常量符号:

---- 任意一个字母,不区分大小写:“[[:alpha:]]”
---- ---- 举例: grep "3[[:alpha:]]{3,5}" re.txt // 匹配3后面有3~5个字母的行;

---- 任意一个小写字母:“ [[:lower:]]”
---- ---- 举例:grep "3[[:lower:]]+" re.txt // 匹配3后面至少有一个小写字母的行;

---- 任意一个大写字母:“ [[:upper:]] ”
---- ---- 举例: grep "3[[:uper:]]?" re.txt // 匹配3后面有0个或者1个大写字母的行;

---- 任意一个数字:“[[:digit:]]”
---- ---- 举例:grep "[[:digit:]]+" re.txt // 匹配至少出现一个数字的行;

---- 任意一个数字或字母:“[[:alnum:]]”
---- ---- 举例:grep "[[:alnum:]]?" re.txt // 匹配至多出现一个字母或数字的行;

---- 表示任意空白字符,包括“空格”、“tab键”等:[[:space:]]
---- ---- 举例:grep "[[:space:]]?" re.txt // 匹配至多一个空白字符或tab;

---- 表示任意标点符号:[[:punct:]]
---- ---- 举例:grep "[[:punct:]]?" re.txt // 匹配至多一个标点符号;


-- 总结:

---- [ ]:表示匹配这个“[]”范围内的任意“单个”字符;

---- [^ ]:表示匹配这个“[ ]”范围以外的任意“单个”字符;

---- [] 和 [^]是相对的,[^ ]相当于[]取反;

---- ---- [[:alpha:]]:
---- ---- ---- 最外层[]:表示指定范围内的任意单个字符;相当于开头的[];
---- ---- ---- 最内层[:alpha:] :表示所有“大写字母和小写字母”组成的集合;

 


---- 等价任意字符:

---- ---- [0-9]等价[[:digit:]]:表示任意的单个“数字”字符;

---- ---- [a-z]等价[[:lower:]]:表示任意单个“小写字母”字符;

---- ---- [A-Z]等价[[:upper:]]:表示任意单个“大写字母”字符;

---- ---- [a-zA-Z]等价[[:alpha:]]:表示任意单个“字母”字符;

---- ---- [a-zA-Z0-9]等价[[:alnum:]]:表示任意单个“字母和数字”字符;

---- ---- [^ a-z]:表示“非小写字母”的单个字符可以被匹配到;

---- ---- [^ A-Z]:表示“非大写字母”的单个字符可以被匹配到;

---- ---- [^ a-zA-Z]:表示“非小写字母和非大写字母”的单个字符可以被匹配到,比如匹配单个“数字”,“符号”;

---- ---- [^ a-zA-Z0-9]:表示“非字母、非数字”的单个字符可以被匹配到,比如匹配单个字符“符号”;

 


五、分组及后向引用:

-- 分组符号:( )

-- -- ( ):表示将括号其中的内容看作一个分组,即括号中的内容看作一个整体;

-- -- -- -- 举例:grep -n --color "(h.l{2}.) world 1" re.txt // 文字解释繁杂,自己琢磨吧;

-- -- -- -- -- “1”:表示引用整个正则中第一分组中的正则所匹配的结果;

-- -- -- -- -- “2”:表示引用整个正则中第二分组中的正则所匹配的结果;


-- -- 嵌套分组:grep --color "(1 (2 ) ) 1 2" re.txt

-- -- -- -- 分组顺序:分组的顺序取决于分组符号的左侧部分的顺序;

-- -- -- -- -- -- 嵌套分组由外到内,1~n;最外层为“分组1”,最内层为“分组n”;

-- -- -- -- -- -- 最左侧第一个括号,为“分组1”;

-- -- -- -- -- -- 最左侧第二个括号,为“分组2”;

-- -- -- -- -- -- 1 :引用第一分组;

-- -- -- -- -- -- 2 :引用第二分组;

 

 

六、转义字符:


-- 转义字符“”: 转义字符功能,表示有“特殊意义”的字符转化成“普通”字符;

-- -- 转义字符“.”:转义后只表示普通的字符“.”;未转义前“.”,表示任意的单个字符;

-- -- 转义字符“*”:转义后只表示普通的字符“*”;未转义前“*”,表示连续引用“*”前面字符任意次数量;

-- -- 转义字符“?”:转移后只表示普通字符“?”;未转义前“?”,表示引用“?”前面字符0次或1次();

-- -- 转移字符“+”:转义后只表示普通字符“+”;未转义前“+”,表示引用“+”前面字符1次到n次(至少1次);

-- -- 转移字符“\”:转义后只表示普通字符“”;未转义前“”,表示“转义符号”;

 


七、基本正则表达式小结:


---- ---- 常用符号

. -- 表示任意单个字符;

* -- 表示“*”前面的字符连续出现任意次数,包括0次;

.* -- 表示任意长度的任意字符,与通配符中的“*”的意思相同;

-- 表示转义字符,当与正则表达式中的符号结合时表示符号本身;

[ ] -- 表示匹配指定范围内的任意单个字符;

[^ ] -- 表示匹配指定范围外的任意单个字符;


---- ---- 单个字符匹配相关:

[[:alpha:]] -- 表示任意单个大小写字母;

[[:lower:]] -- 表示任意单个小写字符;

[[:upper:]] -- 表示任意单个大写字母;

[[:digit:]] -- 表示0~9之间的任意单个数字;

[[:alnum:]] -- 表示任意单个数字或字母;

[[:space:]] -- 表示任意单个空白字符,包括“空格”、“tab键”;

[[:punct:]] -- 表示任意单个标点符号;

[^[:alpha:]] -- 表示单个非字母字符;

[^[:lower:]] -- 表示单个非小写字母字符;

[^[:upper:]] -- 表示单个非大写字母字符;

[^[:digit:]] -- 表示单个非数字字符;

[^[:alnum:]] -- 表示单个非数字非字母的字符;

[^[:space:]] -- 表示单个非空白字符;

[^[:punct:]] -- 表示单个非标点符号字符;

[ 0-9 ] 与 [[:digit:]] 等效;

[ a-z ] 与 [[:lower:]] 等效;

[ A-Z ] 与 [[:upper:]] 等效;

[ a-zA-Z ] 与 [[:alpha:]] 等效;

[ a-zA-Z0-9 ] 与 [[:alnum:]] 等效;

[^ 0-9 ] 与 [^[:digit:]] 等效;

[^ a-z ] 与 [^[:lower:]] 等效;

[^ A-Z ] 与 [^[:upper:]] 等效;

[^ a-zA-Z ] 与 [^[:alpha:]] 等效;

[^ a-zA-Z0-9 ] 与 [^[:alnum:]] 等效;


---- ---- 简短格式(部分解析器识别):

d -- 表示任意单个0~9的数字;

D -- 表示任意非数字字符;

-- 表示匹配单个横向制表符(相当于一个tab键);

s -- 表示匹配单个空白字符,包括“空格”、“tab键”;

S -- 表示匹配单个非空白字符;


---- ---- 次数匹配相关:

? -- 表示匹配“?”前面的字符0或1次;

+ -- 表示匹配“+”前面字符至少一次,或者连续匹配多次,连续次数上不封顶;

{n} -- 表示匹配“{ }”前面字符连续出现n次,将会被匹配到;

{n,m} -- 表示匹配“{}”前面字符连续出现n~m次之间;

{,m} -- 表示匹配“{}”前面字符连续出现m次,最少0次,都会匹配到;

{n,} -- 表示匹配“{}”前面字符连续出现至少n次, 才会被匹配到;


---- ---- 位置边界匹配相关:

^ -- 表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配;

$ -- 表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配;

^$ -- 表示匹配空行,这里所描述的空行表示“回车”,而“空格”或“tab”等都不能算作此处所描述的空行;

^abc& -- 表示abc独占一行时,会匹配到;

<或者:匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现;

>或者:匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现;

B -- 表示匹配非单词边界,与正好相反;

-------- 举例:grep "BerB" re.txt // 匹配er既不在词首也不再词尾的字符串。匹配never,不匹配ever,eraser;

 

---- ---- 分组与向后引用

() -- 表示分组符号,我们可以将其中的内容当作一个整体;分组可以嵌套,由外到内,分组编号为1~n;

(ab) -- 表示将ab当做一个整体去处理;

1 -- 表示引用整个表达式中的第一个分组中的正则匹配到的结果;

2 -- 表示引用整个表达式中的第二个分组中的正则匹配到的结果;

 

 

八、扩展正则表达式

-- 去掉“基本正则表达式”中的转义字符“”;

-- "com|cn|gov" ("|"含义为'或'):多个表达式中,只出现一个;相当于"[(com)(cn)(gov)]";

-- "grep  -E "相当于 "egrep"。

本文由lnlidawei(https://www.cnblogs.com/lnlidawei)原创或整理,转载请注明出处。
原文地址:https://www.cnblogs.com/lnlidawei/p/11986489.html