gpt4 book ai didi

regex - Perl 中带有 * 修饰符的否定前瞻断言

转载 作者:行者123 更新时间:2023-12-04 09:32:22 24 4
gpt4 key购买 nike

我有(我认为是)负面的前瞻断言 <@> *(?!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 .

最佳答案

它匹配是因为“任何数字”中包含零。所以没有空格,后跟一个空格,匹配“任意数量的空格后没有一个 Q”。

您应该添加另一个前瞻断言,即空格之后的第一件事本身不是空格。试试这个(未经测试):

 <@> *(?!QQQ)(?! )

预计到达时间 旁注:仅当只有一个空格时,将量词更改为 + 才有帮助;在一般情况下,正则表达式总是可以少占用一个空间并因此成功。正则表达式想要匹配,并且会以任何可能的方式向后弯曲。所有其他考虑因素(最左边、最长等)都退居次要位置 - 如果它可以匹配多个方式,则它们决定选择哪种方式。但匹配总是胜过不匹配。

关于regex - Perl 中带有 * 修饰符的否定前瞻断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10350053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com