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