正则表达式不包含某些字符串
这个问题在这里已经有了答案:
一般来说写一个不包含特定字符串的正则表达式是一种痛苦。 我们必须为计算模型执行此操作 - 您需要一个易于定义的NFA,然后将其降至正则表达式。 不包含“猫”的东西的表达约为80个字符。
编辑:我刚刚完成,是的,它是:
aa([^a] | a[^a])aa
这是一个非常简短的教程。 我之前发现了一些很棒的,但我再也看不到它们了。
通过谷歌的力量,我发现了一篇2007年的博客帖子,它给出了以下正则表达式,该正则表达式匹配不包含特定子字符串的字符串:
^((?!my string).)*$
它的工作原理如下:它查找零或多个(*)字符(。),它们不会开始(?! - 负向预测)字符串,并且它规定整个字符串必须由这些字符组成(使用^和$锚)。 或者换一种说法:
整个字符串必须由不开始给定字符串的字符组成,这意味着该字符串不包含给定的子字符串。
所有你需要的是一个不情愿的量词:
regex: /aa.*?aa/
aabbabcaabda => aabbabcaa
aaaaaabda => aaaa
aabbabcaabda => aabbabcaa
aababaaaabdaa => aababaa, aabdaa
你也可以使用负向预测,但在这种情况下,它只是一种更加冗长的方式来完成同样的事情。 另外,它比gpojd更容易实现。 在允许点使用下一个字符之前,必须在每个位置应用lookahead。
/aa(?:(?!aa).)*aa/
至于Claudiu和finnw提出的方法,当哨兵字符串只有两个字符长时,它可以正常工作,但是(正如Claudiu所承认的),对于较长的字符串来说太笨拙了。
链接地址: http://www.djcxy.com/p/13371.html上一篇: Regular expression that doesn't contain certain string
下一篇: Regular Expressions and negating a whole character group