- 论坛徽章:
- 307
|
我的代码如下:
- #!/usr/bin/perl
- use strict;
- use warnings;
- local $_ = '2233B55';
- my @aMatches = /\G(\d\d)/g;
- print "<@aMatches>\n";
- @aMatches = /(\d\d)/g;
- print "<@aMatches>\n";
复制代码
输出结果:
<22 33>
<22 33 55>
同样使用 /g 选项, 为什么第一个应用 \G 修饰符的正则表达式的返回结果返回的是 22 33 而不是 22 33 55.
曾经查找过一些资料, 感觉对 \G 修饰符的说明还是不理解, (匹配上次匹配结束的位置)
我的理解, 感觉添加 \G 后, 当正则引擎匹配 33 之后, 下一次匹配的位置从 33 之后 字母 B 之前的位置开始匹配, 由 \d\d 匹配 B5 但是匹配失败. 而此时正则引擎好像此次匹配失败后就放弃了进一步的匹配尝试,
并没有像没有 \G 的表达式那样, 向前推进一个字符的位置做进一步的匹配尝试, 而是直接宣告失败了.
我想请教大家, \G 修饰符是个啥意思? 谢谢大家...
|
|