首页 > Skill > 理解正则表达式中顺序环视、逆序环视
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";
}

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2010/11/23/1998/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

15 Responses to “理解正则表达式中顺序环视、逆序环视”

  1. #1 ugg boots 回复 | 引用 Post:2010-11-23 15:22

    看到这些就觉得头晕! :roll:

    [回复]

  2. #2 胖子 回复 | 引用 Post:2010-11-24 09:41

    《精通正则表达式》?

    [回复]

  3. #3 村长 回复 | 引用 Post:2010-11-24 10:48

    其实我的工作和正则有关系,但是正则对我来说有点难

    [回复]

  4. #4 simaopig 回复 | 引用 Post:2010-11-24 14:42

    @胖子
    是滴,总也想不起来看,不下狠心是不行滴。

    [回复]

  5. #5 华帅 回复 | 引用 Post:2010-11-25 19:01

    路过,不过我只熟悉linux下shell的正则表达式

    [回复]

  6. #6 TaoGOGO 回复 | 引用 Post:2010-11-30 19:58

    叫回溯?……

    [回复]

  7. #7 TaoGOGO 回复 | 引用 Post:2010-12-03 15:22

    ……我错了……呜呜

    [回复]

  8. #8 alswl 回复 | 引用 Post:2010-12-05 11:02

    翻译为零宽断言比较更通用吧~
    普通的正则基本够用,一旦用到断言就要查资料+测试了~

    [回复]

  9. #9 bronze casting 回复 | 引用 Post:2010-12-21 14:33

    还好不是整篇的代码,不然又看不懂了

    [回复]

  10. #10 impact wrench 回复 | 引用 Post:2010-12-21 15:54

    额…….看不太懂!~~

    [回复]

  11. #11 hex nuts 回复 | 引用 Post:2011-01-12 13:14

    下面那个表格正则表达式一定要这么写吗

    [回复]

  12. #12 baby stroller 回复 | 引用 Post:2011-01-12 13:35

    有时正则,又是顺序,逆序。搞的我头晕晕的

    [回复]

  13. #13 Maplews 回复 | 引用 Post:2011-01-23 00:33

    我觉得正则有点昏头的感觉

    [回复]

  14. #14 martian 回复 | 引用 Post:2011-02-24 16:44

    原来环视匹配的是位置。我看了半天没看懂的正则表达式瞬间明白了,感谢~

    [回复]

  15. #15 CFC4N 回复 | 引用 Post:2011-03-01 15:18

    php中的零宽断言应该不支持不固定长度的位置查找。.NET的支持。
    也就是(?<=\d+)这种.鄙人也比较喜欢正则,有时间,可以一起探讨一下。 :mrgreen:

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)