正则表达式中是否可以进行字符串求反?我需要匹配所有不包含字符串
".."
的字符串。我知道您可以使用 ^[^\.]*$
来匹配所有不包含 "."
的字符串,但我需要匹配多个字符。我知道我可以简单地匹配包含 ".."
的字符串,然后否定匹配的返回值以获得相同的结果,但我只是想知道这是否可能。
您可以使用否定前瞻:
^(?!.*\.\.).*$
如果表达式可以在字符串中的任何位置找到两个句点的序列,则会导致表达式不匹配。
^(?:(?!\.\.).)*$
仅当字符串中任何地方没有两个连续的点时才匹配。
如果您的正则表达式引擎不支持负向先行,请将您想要的内容表达为非点或点后跟非点的任意多次重复。 (另一种思考方式是,如果您没有看到点,那么您很高兴,但是如果您确实看到了点,则下一个字符必须是非点。)请记住接受由点组成的字符串没有别的。
作为正则表达式,上面是
^([^.]|\.[^.])*\.?$
请注意,此模式与空字符串匹配,因为它不包含点-点。