1. 零宽断言
1.1 简介
零宽断言是正则表达式中的一种特殊结构,用于在匹配过程中指定位置而不匹配实际字符。它们被称为“零宽”是因为它们不会消耗输入字符串中的字符,也不会在结果中包含任何字符。
1.2 形式
-
正向预查(Positive Lookahead):用于查找在某些内容之前存在的情况,但并不匹配这些内容。它以
(?=...)
的形式表示,其中...
是要匹配的内容。 -
负向预查(Negative Lookahead):与正向预查相反,用于查找在某些内容之前不存在的情况。它以
(?!...)
的形式表示,其中...
是不允许出现的内容。 -
正向回顾后发断言(Positive Lookbehind):用于查找在某些内容之后存在的情况,但并不匹配这些内容。它以
(?<=...)
的形式表示,其中...
是要匹配的内容。 -
负向回顾后发断言(Negative Lookbehind):与正向回顾后发断言相反,用于查找在某些内容之后不存在的情况。它以
(?<!...)
的形式表示,其中...
是不允许出现的内容。
2. 使用示例
2.1 正向预查(?=...)
例如,我们要匹配文本中的小时值或月份。为了只匹配后面有 PM | 月份 的数值,我们需要在表达式后面使用正向先行断言 (?=),并在括号内的 = 后面添加 PM | 月份。
2.2 负向预查(?!...)
例如,我们要在文本中匹配除小时和月份值以外的数字。我们需要在表达式后面使用负向先行断言 (?!),并在括号内的 ! 后面添加 PM|Aug,从而只匹配没有 小时和月份值 的数值。
2.3 正向回顾后发断言(?<=...)
例如,我们要匹配文本中的金额数。为了只匹配前面带有 $ 的数字。我们要在表达式前面使用正向后行断言 (?<=),并在括号内的 = 后面添加 \$。
2.4负向回顾后发断言(?<!...)
例如,我们要在文本中匹配除价格外的数字。为了只匹配前面没有 $ 的数字,我们要在表达式前用负向后行断言 (?<!),并在括号内的 ! 后面添加 \$。
欢迎各位在下方评论区留言。