【发布时间】:2010-08-02 20:25:39
【问题描述】:
Ruby 1.9 正则表达式支持后向断言,但在模式中传递锚点时我似乎遇到了困难。当在前瞻断言中传递锚点时,它运行得很好。
"well substring! "[/(?<=^|\A|\s|\b)substring!(?=$|\Z|\s|\b)/] #=> RegexpError: invalid pattern in look-behind: /(?<=^|\A|\s|\b)substring(?=$|\Z|\s|\b)/
有人知道如何使锚点在后向断言中像在前瞻中一样工作吗?
lookbehind 是否需要特殊的转义序列或分组?
我已经在 1.9.1-p243、p376 和 1.9.2-preview3 中测试了这种行为,以防它被修补。
【问题讨论】:
-
最后,这不是一个锚问题,因为锚 \b 没有像前瞻断言那样被识别为单词边界。使用 Not a Not word 边界 - [^\B] 解决了问题。
-
这可能会让人感到意外,但如果
\b在你身后,它也在你面前!对于所有零宽度锚点都是如此,至少在 Java 中是这样。 -
克拉皮!世界这么小!
标签: regex anchor assertions ruby-1.9 lookbehind