$str="abc123abcc12c34";
$str =~ /a.*(?<=\d)c/; # abc123abcc12c
print "$&\n";
这个作用
正则引擎默认从左向右(顺序)扫描字符串,而逆序环视(?<=)要求匹配时向左回溯检查当前位置左侧的字符是否符合条件
1
2。
在示例a.*(?<=\d)c中:
当引擎扫描到候选字符c时
逆序环视(?<=\d)强制引擎向左检查c前面的字符
若左侧字符是数字(\d),则c匹配成功
原始匹配:a.*c → 匹配到结尾(失败)
回溯过程:
...12c34 ← 检查最后一个c:左侧是'2'(数字) → 匹配成功
↑
逆序检查方向