积极的看后面不起作用,但展望未来的工作

时间:2012-10-19 16:24:41

标签: regex regex-lookarounds

我的字符串包含所有数字

我想检查是否:

  1. 所有数字都在0-4
  2. 的范围内
  3. 字符串的最小长度应为5
  4. 所以,我使用了这个正则表达式:

    (?=^\d{5,}$)(^[0-4]*$) //works
    

    正如所料,这可以完成工作

    但是当使用正面看后面的上述正则表达式不起作用

    (?<=^\d{5,}$)(^[0-4]*$) //doesn't work
    

    为什么positive look behind不起作用,look ahead在这种情况下起作用

    修改

    是的,我可以使用

    ^[0-4]{5,}$

    但问题是为什么look-behind在上述情况下无效

    这是参考THIS问题,其中lookahead工作但不lookbehind

2 个答案:

答案 0 :(得分:1)

问题是你没有把结果固定在输入的末尾 试试这个:

(?<=^\d{5,})(^[^5-9]*)$ // $ at end (and removed now-redundant $ from each look behind)

此外,负面消极因素更难阅读。只需使用[0-4]代替[^5-9]

最后,为什么不使用它:

^[0-4]{5,}$

答案 1 :(得分:1)

你不应该从后面看,以匹配“看背后断言”吗?

(^[0-4]*$)(?<=^\d{5,}$)

现在看来,你想要这个:

  • 关注 5个或更多字符(包含整个字符串)
  • 字符串的开头
  • 包含[0-4]

基本上减少到

  • false