正则表达式不包含某些字符串

这个问题在这里已经有了答案:

  • 正则表达式匹配不包含单词的行吗? 25个答案

  • 一般来说写一个包含特定字符串的正则表达式是一种痛苦。 我们必须为计算模型执行此操作 - 您需要一个易于定义的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