RegEx排除特定的字符串常量

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

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

  • 你必须使用否定的前瞻断言。

    (?!^ABC$)
    

    你可以例如使用以下内容。

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

    如果这在编辑器中不起作用,请尝试此操作。 它被测试在ruby和javascript中工作:

    ^((?!ABC).)*$
    

    这并不容易,除非你的正则表达式引擎对它有特殊的支持。 最简单的方法是使用否定匹配选项,例如:

    $var !~ /^foo$/
        or die "too much foo";
    

    如果没有,你必须做一些邪恶的事情:

    $var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/
        or die "too much foo";
    

    那个基本上说“如果它以非f开头,其余的可以是任何东西;如果它以f开头,非o ,其余的可以是任何东西;否则,如果开始fo ,下一个字符最好不是另一个o “。


    在.NET中,你可以像这样使用分组:

    http://regexhero.net/tester/?id=65b32601-2326-4ece-912b-6dcefd883f31

    你会注意到:

    (ABC)|(.)
    

    除了ABC在第二组之外,会抢到一切。 括号包围每个组。 所以(ABC)是组1,(。)是组2。

    所以你只需像这样在第二组中取代:

    $2
    

    或者在.NET中查看Regex类中的Groups集合以获得更多控制权。

    你应该能够在大多数其他正则表达式实现中做类似的事情。

    更新:我发现了一个更快的方式来做到这一点:http://regexhero.net/tester/?id=997ce4a2-878c-41f2-9d28-34e0c5080e03

    它仍然使用分组(我找不到一种不使用分组的方式)。 但是这种方法比第一种方法快10倍以上。

    链接地址: http://www.djcxy.com/p/13373.html

    上一篇: RegEx to exclude a specific string constant

    下一篇: Regular expression that doesn't contain certain string