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