使用正则表达式进行字符串求反

问题描述 投票:0回答:3

正则表达式中是否可以进行字符串求反?我需要匹配所有不包含字符串

".."
的字符串。我知道您可以使用
^[^\.]*$
来匹配所有不包含
"."
的字符串,但我需要匹配多个字符。我知道我可以简单地匹配包含
".."
的字符串,然后否定匹配的返回值以获得相同的结果,但我只是想知道这是否可能。

regex regex-lookarounds negation
3个回答
42
投票

您可以使用否定前瞻:

^(?!.*\.\.).*$

如果表达式可以在字符串中的任何位置找到两个句点的序列,则会导致表达式不匹配。


5
投票
^(?:(?!\.\.).)*$

仅当字符串中任何地方没有两个连续的点时才匹配。


0
投票

如果您的正则表达式引擎不支持负向先行,请将您想要的内容表达为非点或点后跟非点的任意多次重复。 (另一种思考方式是,如果您没有看到点,那么您很高兴,但是如果您确实看到了点,则下一个字符必须是非点。)请记住接受由点组成的字符串没有别的。

作为正则表达式,上面是

^([^.]|\.[^.])*\.?$

请注意,此模式与空字符串匹配,因为它不包含点-点。

© www.soinside.com 2019 - 2024. All rights reserved.