2

我有包含所有数字的字符串。

我想检查是否:

  1. 所有数字都在 的范围内0-4,并且
  2. 字符串的最小长度应该是5

所以,我使用了这个正则表达式:

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

正如预期的那样,这可以完成工作

但是上面的正则表达式在正面使用时不起作用

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

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

编辑

是的,我可以使用

^[0-4]{5,}$

但问题是为什么look-behind在上述情况下不起作用

这是参考THIS question where lookaheadworking but notlookbehind

4

2 回答 2

1

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

IE

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

就目前而言,你想要这个:

  • 后跟5 个或更多字符(构成整个字符串)
  • 字符串的开头
  • 包含[0-4]

这基本上减少到

  • false
于 2012-10-19T16:47:57.943 回答
1

问题是您没有将后面的外观固定到输入的末尾。
尝试这个:

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

此外,负面否定更难阅读。只需使用[0-4]而不是[^5-9].

最后,为什么不使用这个:

^[0-4]{5,}$
于 2012-10-19T16:28:22.593 回答