【发布时间】:2012-08-29 19:45:56
【问题描述】:
我有(我认为是)负前瞻断言<@> *(?!QQQ),如果测试字符串是<@>,后跟任意数量的空格(包括零),我希望匹配它然后 not 后跟 QQQ。
然而,如果测试字符串是<@> QQQ,则正则表达式匹配。
我不明白为什么会出现这种情况,希望能在此问题上提供任何帮助。
这是一个测试脚本
use warnings;
use strict;
my @strings = ('something <@> QQQ',
'something <@> RRR',
'something <@>QQQ' ,
'something <@>RRR' );
print "$_\n" for map {$_ . " --> " . rep($_) } (@strings);
sub rep {
my $string = shift;
$string =~ s,<@> *(?!QQQ),at w/o ,;
$string =~ s,<@> *QQQ,at w/ QQQ,;
return $string;
}
打印出来
something <@> QQQ --> something at w/o QQQ
something <@> RRR --> something at w/o RRR
something <@>QQQ --> something at w/ QQQ
something <@>RRR --> something at w/o RRR
我本来希望第一行是something <@> QQQ --> something at w/ QQQ。
【问题讨论】:
标签: regex perl negative-lookahead regex-lookarounds