码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式总结

时间:2019-12-04 23:33:07      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:结果   style   通配   之间   linu   回车   表达   第一个   标点符号   

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

 


正则表达式总结:

 


一、匹配“行”:

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

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

 


二、匹配“词”:

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

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

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


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

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

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

 


三、连续次数匹配:

---- 匹配字符连续出现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 -- 表示任意非数字字符;

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

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

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

 


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

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

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

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

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

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

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

 


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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

 

八、扩展正则表达式

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

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

正则表达式总结

标签:结果   style   通配   之间   linu   回车   表达   第一个   标点符号   

原文地址:https://www.cnblogs.com/lnlidawei/p/11986489.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!