V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
codeplay
V2EX  ›  程序员

在看正则表达式,有个简单的问题想请教各位

  •  
  •   codeplay · 2012-07-02 23:11:47 +08:00 · 3534 次点击
    这是一个创建于 4511 天前的主题,其中的信息可能已经有所发展或是发生改变。
    \w8
    去匹配888,按我的理解有两个才对(第一个第二个8,第二个第三个8),为什么我使用在线的regexpal.com/结果只有一个呢?
    3 条回复    1970-01-01 08:00:00 +08:00
    khotyn
        1
    khotyn  
       2012-07-02 23:38:01 +08:00
    第二个匹配应该在第一个匹配结果的后面开始,因为第一次匹配完了以后只剩下一个 8 了,所以匹配不上,所以只有一个结果。
    nani
        2
    nani  
       2012-07-07 23:24:51 +08:00
    不严紧,应该是这样吧 \w8{3}
    013231
        3
    013231  
       2012-07-08 01:45:39 +08:00
    想匹配2次你应该写成
    (?=\w8).
    你可以这么理解: 一般的匹配会把已匹配到的部分消耗掉. /\w8/匹配了888中的前2个8, 它们被消耗掉了; 剩下的一个8自然无法和/\w8/匹配.
    然而(?=pattern)是所谓的"正向肯定预查", 它的作用是"匹配, 但不消耗". /(?=\w8)/匹配了前2个8, 但并没把它们消耗掉. 不过只用/(?=\w8)/是不行的, 由于不消耗字符, 它只能无限在原地匹配, 所以在后面加一个'.', 消耗一个字符, 使匹配起点右移一位.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2694 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:58 · PVG 20:58 · LAX 04:58 · JFK 07:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.