my $test = "There was once ann ugly ducking";
if ($test =~ m/ugly/g) {
if ($test =~ m/here/g) {
print 'Match';
}
}
导致无输出,但
my $test = "There was once ann ugly ducking";
if ($test =~ m/here/g) {
if ($test =~ m/ugly/g) {
print 'Match';
}
}
结果在匹配!
如果我从正则表达式中删除 g 标志,那么第二个内部测试会匹配匹配项$test中显示的任何方式。我找不到为什么会这样。
是的。该行为记录在手册页perlop
。使用带有g
标志的m/.../
在字符串中前进以进行下一场比赛。
在标量上下文中,"m//g" 的每次执行都会找到下一个匹配项,如果匹配,则返回 true,如果没有进一步匹配项,则返回 false。 可以使用"pos()"函数读取或设置最后一场比赛后的位置;参见 Perlfunc 中的 "POS"。失败的匹配通常会重置搜索位置 到字符串的开头,但您可以通过添加"/c"修饰符(例如"m//gc")来避免这种情况。修改目标字符串也会重置搜索位置。
因此,在第一种情况下,ugly
之后没有任何here
子字符串,但在第二种情况下,它首先与There
中的here
匹配,然后找到ugly
单词。