У меня есть (то, что я считаю)отрицательным прогнозным утверждением <@> *(?!QQQ)
, который, как я ожидаю, будет соответствовать, если проверяемая строка представляет собой <@>
, за которой следует любое количество пробелов (ноль, включая ), а затем , а не , за которым следует 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
.