• 请不要在回答技术问题时复制粘贴 AI 生成的内容
codeplay
V2EX  ›  程序员

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

  •  
  •   codeplay · Jul 2, 2012 · 4368 views
    This topic created in 5064 days ago, the information mentioned may be changed or developed.
    \w8
    去匹配888,按我的理解有两个才对(第一个第二个8,第二个第三个8),为什么我使用在线的regexpal.com/结果只有一个呢?
    3 replies    1970-01-01 08:00:00 +08:00
    khotyn
        1
    khotyn  
       Jul 2, 2012
    第二个匹配应该在第一个匹配结果的后面开始,因为第一次匹配完了以后只剩下一个 8 了,所以匹配不上,所以只有一个结果。
    nani
        2
    nani  
       Jul 7, 2012
    不严紧,应该是这样吧 \w8{3}
    013231
        3
    013231  
       Jul 8, 2012
    想匹配2次你应该写成
    (?=\w8).
    你可以这么理解: 一般的匹配会把已匹配到的部分消耗掉. /\w8/匹配了888中的前2个8, 它们被消耗掉了; 剩下的一个8自然无法和/\w8/匹配.
    然而(?=pattern)是所谓的"正向肯定预查", 它的作用是"匹配, 但不消耗". /(?=\w8)/匹配了前2个8, 但并没把它们消耗掉. 不过只用/(?=\w8)/是不行的, 由于不消耗字符, 它只能无限在原地匹配, 所以在后面加一个'.', 消耗一个字符, 使匹配起点右移一位.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5500 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 09:12 · PVG 17:12 · LAX 02:12 · JFK 05:12
    ♥ Do have faith in what you're doing.