テストされた文字列の後に任意の数のスペース(ゼロを含む)が続き、その後に。が続かない場合に一致すると予想される(私が信じている)否定的な先読みアサーション があります。<@> *(?!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
。