RegEx排除特定的字符串常量
这个问题在这里已经有了答案:
你必须使用否定的前瞻断言。
(?!^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