正则表达式--断言

正则表达式–断言

断言(前后预查)

断言的特点就是,断言不会作为匹配的结果

先行断言和后发断言都属于非捕获簇不捕获文本 ,也不针对组合计进行计数,就是断言不会作为匹配的结果)。 

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

例如,我们想要获得所有跟在 $ 符号后的数字,我们可以使用正后发断言 (?<=$)[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** **?<= …** **正后发断言

正后发断言 记作(?<=…) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。 例如,表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fat  mat,且其前跟着 The  the

“(?<=(T|t)he\s)(fat|mat)” => The fat cat sat on the mat.

在线练习

4.4** **?<!…** **负后发断言

负后发断言 记作 (?<!…) 用于筛选所有匹配结果,筛选条件为 其前不跟随着断言中定义的格式。 例如,表达式 (?<!(T|t)he\s)(cat) 匹配 cat,且其前不跟着 The  the

“(?<!(T|t)he\s)(cat)” => The cat sat on cat.


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!