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