- 论坛徽章:
- 1
|
本帖最后由 ciedecem 于 2012-06-27 15:19 编辑
85sui 发表于 2012-06-15 14:20 ![]()
$string =~ s/^(-?\d+)(\d\d\d)/$1,$2/g;
和
1 while $string =~ s/^(-?\d+)(\d\d\d)/$1,$2/;
其实二楼说的很对的。
第一个表达式,就是二楼说的那样,我可以帮忙解释下:
假设你给的$string = 12330384558;
标准量词+会尽可能多的匹配所有的可能的字符。这里的\d+就匹配了所有的$string字符,然后再尝试匹配(\d\d\d),之前的\d+被迫吐出三个数字,从而就成了12330384,558,而此时已经到了字符串的末尾,没有“未匹配部分”供/g的下一次匹配迭代使用了。
对于while,道理一样,只是每次循环$string的值都被修改了一次,\d+匹配的内容也不断缩小。
$pattern ='NUM1 NUM2 NUM3';
$pattern =~ s/NUM/LETTER/g;
print "$pattern\n";
这个可以帮你理解/g的作用, 正则引擎应该有指针在标识着匹配的“当前位置”。
不完全引用《精通正则表达式》 |
|