简单高效有用的正则表达式(3)

正则表达式提供一些常用的字符集简写。如下:

简写 描述
.   除换行符外的所有字符  
\w   匹配所有字母数字,等同于 [a-zA-Z0-9_]  
\W   匹配所有非字母数字,即符号,等同于: [^\w]  
\d   匹配数字: [0-9]  
\D   匹配非数字: [^\d]  
\s   匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]  
\S   匹配所有非空格字符: [^\s]  
\f   匹配一个换页符  
\n   匹配一个换行符  
\r   匹配一个回车符  
\t   匹配一个制表符  
\v   匹配一个垂直制表符  
\p   匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符  
4. 零宽度断言(前后预查)

先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数)。先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束)。

例如,我们想要获得所有跟在 $ 符号后的数字,我们可以使用正后发断言 (?<=\$)[0-9\.]*。这个表达式匹配 $ 开头,之后跟着 0,1,2,3,4,5,6,7,8,9,. 这些字符可以出现大于等于 0 次。

零宽度断言如下:

符号 描述
?=   正先行断言-存在  
?!   负先行断言-排除  
?<=   正后发断言-存在  
?<!   负后发断言-排除  
4.1 ?=... 正先行断言

?=... 正先行断言,表示第一部分表达式之后必须跟着 ?=...定义的表达式。

返回结果只包含满足匹配条件的第一部分表达式。定义一个正先行断言要使用 ()。在括号内部使用一个问号和等号: (?=...)。

正先行断言的内容写在括号中的等号后面。例如,表达式 (T|t)he(?=\sfat) 匹配 The 和 the,在括号中我们又定义了正先行断言 (?=\sfat) ,即 The 和 the 后面紧跟着 (空格)fat。

"(T|t)he(?=\sfat)" => The fat cat sat on the mat.

在线练习

4.2 ?!... 负先行断言

负先行断言 ?! 用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。 正先行断言 定义和 负先行断言 一样,区别就是 = 替换成 ! 也就是 (?!...)。

表达式 (T|t)he(?!\sfat) 匹配 The 和 the,且其后不跟着 (空格)fat。

"(T|t)he(?!\sfat)" => The fat cat sat on the mat.

在线练习

4.3 ?<= ... 正后发断言

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywgwf.html