116 regex regex-negation
可以使用正则表达式来匹配除特定字符串常量之外的任何字符串,让我们说"ABC"吗?这可能只排除一个特定的字符串常量吗?提前感谢您的帮助.
Dan*_*ner 139
你必须使用负前瞻断言.
(?!^ABC$)
例如,您可以使用以下内容.
(?!^ABC$)(^.*$)
如果这在您的编辑器中不起作用,请尝试这样做.它被测试在ruby和javascript中工作:
^((?!ABC).)*$
试试这个正则表达式:
^(.{0,2}|([^A]..|A[^B].|AB[^C])|.{4,})$
它描述了三种情况:
A,或者A但第二个不是B,或者A,第二个B但第三个不是C您可以使用负前瞻,或类似的东西:
^([^A]|A([^B]|B([^C]|$)|$)|$).*$
也许它可以简化一点。
在.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倍以上。
除非您的regexp引擎对此有特殊支持,否则这并不容易。最简单的方法是使用否定匹配选项,例如:
$var !~ /^foo$/
    or die "too much foo";
如果没有,则必须做一些邪恶的事情:
$var =~ /^(($)|([^f].*)|(f[^o].*)|(fo[^o].*)|(foo.+))$/
    or die "too much foo";
那基本上是说“如果它以non-开头f,其余可以是任何东西;如果它以f,non- 开头o,其余可以是任何东西;否则,如果它以开头fo,则下一个字符最好不要是另一个o。”
| 归档时间: | 
 | 
| 查看次数: | 283458 次 | 
| 最近记录: |