转载地址:https://gxnotes.com/article/41270.html
问题描述
我找不到正确的正则表达式来匹配任何不以某种条件结尾的字符串。例如,我不想匹配以a
结尾的任何内容。
这匹配
b
ab
1
这不符合
a ba
我知道正则表达式应该结束于$
来标记结束,尽管我不知道应该怎么做。
编辑:原来的问题似乎不是我的例子。那么,如何处理多个字符?说什么没有结束ab
?
我已经能够解决这个问题,使用this thread:
.*(?:(?!ab).).$
虽然这样做的缺点是它与一个字符串不匹配。
最佳解决方案
你不给我们的语言,但是如果你的正则表达式支持look behind assertion,这就是你需要的:
.*(?<!a)$
(?<!a)
是一个否定的lookbehind断言,确保在字符串(或具有m
修饰符的行)的结尾之前,没有字符”a”。
您也可以轻松地将其与其他字符进行扩展,因为此检查字符串并不是字符类。
.*(?<!ab)$
这将匹配任何不结束与”ab”,see it on Regexr
次佳解决方案
使用not(^
)符号:
.*[^a]$
如果您将^
符号放在方括号的开头,则表示“括号内的所有内容”。$
只是一个到底的锚点。
For multiple characters,只是把它们全部放在自己的字符集中:
.*[^a][^b]$
第三种解决方案
^(?!.*[.]tmp$).*$
用Regex Tester测试得出以下结果:
第四种方案
上面的正则表达式将匹配不是以a
结尾的字符串。参考文献