什么是否定的先读
?!通过将以括号()括起来的正则表达式以不包含指定字符串(负预读)为条件进行匹配。另外,也可以在否定预读的前后连接其他模式来描述。
使用否定预读的例子
在下面的例子中,否定的前置词(?!通过在~)前后连接表示句头的^和表示句尾的$来搜索行。
不含〜
与不包含字符串“abc”的行匹配。
^(?!.*abc).*$
不包含〜或〜
匹配不包含“abc”或“efg”字符串的行。
^(?!.*(abc|efg)).*$
如果要增加条件,请添加每个单词以|分隔。
不是从〜开始的
匹配以字符串“abc”开头的行。
^(?!abc).*$
〜で終わらない
匹配以字符串“abc”结尾的行。
^(?!.*abc$).*$
包含〜但不包含~
与包含“abc”但不包含“def”的行匹配。
^(?=.*abc)(?!.*def).*$
?=表示肯定前读。
总结
使用否定条件可使搜索范围之外的匹配成为可能。此外,通过添加|或()分隔条件,可以进一步缩小搜索范围。利用否定正则表达式进行更有效的搜索。