RegEx to exclude a specific string constant
本问题已经有最佳答案,请猛点这里访问。
正则表达式是否可以用于匹配除特定字符串常量之外的任何字符串,我们称之为"abc"?是否可以只排除一个特定的字符串常量?事先谢谢你的帮助。
您必须使用否定的先行断言。
1 | (?!^ABC$) |
例如,您可以使用以下内容。
1 | (?!^ABC$)(^.*$) |
如果这在编辑器中不起作用,请尝试此操作。它在Ruby和Javascript中进行了测试:
1 | ^((?!ABC).)*$ |
在.NET中,你可以使用分组来实现你的优势:
http://regexhero.net/tester/?ID=65B32601-2326-4ECE-912B-6DCEFD883F31
你会注意到:
1 | (ABC)|(.) |
将抓取除ABC以外的所有东西在第二组。括号环绕着每组。所以(abc)是第1组(.)是第2组。
所以你只需要在替换中抓取第二组这样的内容:
1 | $2 |
或者在.NET中,查看regex类内的groups集合以获得更多的控件。
在大多数其他regex实现中,您也应该能够执行类似的操作。
更新:我在这里找到了一个更快的方法:http://regexhero.net/tester/?ID=997CE4A2-878C-41F2-9D28-34E0C5080E03
它仍然使用分组(我找不到不使用分组的方法)。但这种方法比第一种方法快10倍以上。
你可以使用否定的前瞻,或者类似的东西:
1 | ^([^A]|A([^B]|B([^C]|$)|$)|$).*$ |
也许它可以简化一点。
这并不容易,除非您的regexp引擎对它有特殊的支持。最简单的方法是使用负匹配选项,例如:
1 2 | $var !~ /^foo$/ or die"too much foo"; |
如果没有,你必须做些坏事:
1 2 | $var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/ or die"too much foo"; |
基本上说"如果以非
尝试此正则表达式:
1 | ^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$ |
它描述了三种情况:
- 第一个不是
A ,或 - 第一个是
A ,第二个不是B ,或者 - 第一个是
A ,第二个是B ,但第三个不是C 。