Perl 为什么补充搜索列表没有';不行?

Perl 为什么补充搜索列表没有';不行?,perl,Perl,我期望“abc”=~/\Aabc\z/gc为false,因为存在/c,如本例所示: $pathname =˜ tr/a-zA-Z/_/cs; # change non-(ASCII)alphas to single underbar 但事实证明这是真的,任何人都可以解释原因?/c不进行补码匹配:) 禁止字符串中任何可以执行的操作 但这将大大降低效率 编辑: /gc修饰符:(来自) 匹配失败或更改目标字符串将重置位置。如果不希望在匹配失败后重置位置,请添加/c,如/regexp/gc中所示。字符

我期望
“abc”=~/\Aabc\z/gc
为false,因为存在
/c
,如本例所示:

$pathname =˜ tr/a-zA-Z/_/cs; # change non-(ASCII)alphas to single underbar

但事实证明这是真的,任何人都可以解释原因?

/c
不进行补码匹配:)

禁止字符串中任何可以执行的操作

但这将大大降低效率

编辑:

/gc
修饰符:(来自) 匹配失败或更改目标字符串将重置位置。如果不希望在匹配失败后重置位置,请添加
/c
,如
/regexp/gc
中所示。字符串中的当前位置与字符串关联,而不是与regexp关联。这意味着不同的字符串具有不同的位置,可以单独设置或读取它们各自的位置

请参阅以了解
/c
的实际作用(应用于regexp匹配运算符时,它不会像使用
tr///
那样进行补充)。音译不是regexp,regexen也不是音译

来自perlretut:

匹配失败或更改目标字符串将重置位置。如果 如果不希望在匹配失败后重置位置,请添加//c ,如/regexp/gc中所示

几乎相同的段落出现在《佩尔勒奎克》中

perlre让搜索变得有点困难,但它是这么说的:

g和c 全局匹配,匹配失败后保留当前位置。 与i、m、s和x不同,这两个标志影响正则表达式的使用方式 而不是正则表达式本身。请参见中的在Perl中使用正则表达式 关于g和c修饰语的进一步解释,请参见


如果您想检查某个内容是否不在字符串中,我建议

$str !~ /abc/
它是

!( $str =~ /abc/ )
您也可以使用以下方法,但这是不必要的复杂(而且速度慢?)


那么,
/c
与匹配有什么关系呢?@new_perl:see
perldoc perlre
perldoc perlretut
(也编辑了答案)@ColinFine:nice。我不知道operatorI会修复你的帖子并在评论中留下解释,因为我认为你只是缺少了一个字符,但你的三个答案都是错误的。科林·费恩也是<代码>如果(/…/g)在概念上没有意义,那么它肯定不会执行您希望它执行的操作,并且可能会导致错误。我在回答中发布了正确的版本。@ikegami我同意把
/g
留在里面是愚蠢的;不知何故,我犯了一个错误,就是过于接近原始代码(当实际意图不完全清楚时,这种情况就会发生在我身上)。老实说,我仍然不认为OP的意图是完全清楚的。
$str !~ /abc/
!( $str =~ /abc/ )
$str =~ /^(?:(?!abc).)*\z/s