2010十一月23
理解正则表达式中顺序环视、逆序环视
学习正则表达式中,这个顺序环视和逆序环视,搞的比较头晕。
所以,我决定还是写在日志里吧。这样以后回忆起来方便,如果哪里理解错了,路过的朋友们请帮忙指出,谢谢!
所谓顺序环视和逆序环视,首先要理解,这个环视匹配的什么?不是内容,而是位置。并且是位置的前后要匹配对应的内容。这样理解就事半功倍了。
先来看顺序环视,这个顺序说的是从左往右看。这样,一旦使用顺序环视,例如:(?=\d) 其说的就是位置的右侧有一个数字。也就是说在一个数字前面的位置。
这样理解下来,再来看逆序环视,这个顺序是从右往左看。这样一旦使用逆序环视,例如:(?<=\d) 其说的就是位置的左侧有一个数字。也就是说在一个数字后面的位置。
简单理解清楚了,那么就可以按照书中的为美元加逗号描述了,代码如下:
(我们的美元逗号是如下规则:左侧一定要有数字,逗号的所在位置右侧一定有三个数字)
print "Please input a number \n";
$input = <STDIN>;
chomp($input);
if( $input =~ m(\d+)){
$input =~ s/(?<=\d)(?=(\d\d\d)+$)/,/g;
print "output is $input \n";
} else {
print "You must input a number \n";
}
$input = <STDIN>;
chomp($input);
if( $input =~ m(\d+)){
$input =~ s/(?<=\d)(?=(\d\d\d)+$)/,/g;
print "output is $input \n";
} else {
print "You must input a number \n";
}

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2010/11/23/1998/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
看到这些就觉得头晕!
[回复]
《精通正则表达式》?
[回复]
其实我的工作和正则有关系,但是正则对我来说有点难
[回复]
@胖子
是滴,总也想不起来看,不下狠心是不行滴。
[回复]
路过,不过我只熟悉linux下shell的正则表达式
[回复]
叫回溯?……
[回复]
……我错了……呜呜
[回复]
翻译为零宽断言比较更通用吧~
普通的正则基本够用,一旦用到断言就要查资料+测试了~
[回复]
还好不是整篇的代码,不然又看不懂了
[回复]
额…….看不太懂!~~
[回复]
下面那个表格正则表达式一定要这么写吗
[回复]
有时正则,又是顺序,逆序。搞的我头晕晕的
[回复]
我觉得正则有点昏头的感觉
[回复]
原来环视匹配的是位置。我看了半天没看懂的正则表达式瞬间明白了,感谢~
[回复]
php中的零宽断言应该不支持不固定长度的位置查找。.NET的支持。
也就是(?<=\d+)这种.鄙人也比较喜欢正则,有时间,可以一起探讨一下。
[回复]