【发布时间】:2010-08-16 18:11:49
【问题描述】:
好的,我从正则表达式食谱中得到了这个例子
^(?=.{3}$).*
上面的正则表达式用于限制任意模式的长度
如果我再次测试'aaabbb',它会完全失败
据我了解,它会查找长度为任何字符 3 的任何字符。所以它应该匹配 'bbb' 但它不是
还有一个问题,应该遵循这个模式 x(?=x)
【问题讨论】:
-
您使用的是前瞻断言,因为它查看尚未使用的字符。后视断言将查看已使用的字符。
-
但是你到底想完成什么?
-
已编辑:限制任意模式的长度
-
@slier: 但
^(?=.{3}$)只会匹配长度为 3 的字符串。所以aaabbb(长度为六)不会匹配。 -
前瞻断言是非消耗性的(如 Gumbo 所述),它只是检查即将出现的字符以查看它们是否满足约束。在这种情况下,您的模式首先查看字符串的开头,然后执行前瞻断言。这将检查三个字符,它们分别与 3 个 a 匹配,然后检查字符串的结尾。由于字符串的结尾不是直接在前三个字符之后,因此前瞻失败,因此模式失败。