【问题标题】:How to make negative lookahead work with end of line text如何使负前瞻与行尾文本一起使用
【发布时间】:2011-03-01 22:44:43
【问题描述】:

我有一个如下的正则表达式:

.{0,1000}(?!(xa7|para(graf))$)

使用 Java。 我期待它会导致以下文本失败:

废话

因为在末尾找到了paragraf

【问题讨论】:

    标签: java regex negative-lookahead


    【解决方案1】:

    错误放置断言是一个常见的错误。如果你想使用前瞻,模式是这样的:

    ^(?!.*paragraph$).*$
    

    这匹配 (as seen on rubular.com):

    something something para
    paragraph something something
    

    但不匹配:

    something paragraph
    

    所以这里的关键区别在于,我们在匹配.*(或在您的情况下为.{0,1000})之前,开始查看字符串的开头。当然,我们要找的不仅仅是paragraph$,而是.*paragraph$

    也就是说,要检查字符串是否以有限长度结尾,在支持时向后查找是最自然的解决方案。

    ^.*$(?<!paragraph)
    

    【讨论】:

    • 所以 ^(?!.*paragraph$).*$ 首先检查字符串是否不以段落结尾,然后检查整个字符串是否匹配 .*?
    【解决方案2】:

    这是因为.{0,1000} 将匹配整个主题,因此它后面没有xa7paragraf(它后面只有$)。

    你想要消极的向后看:

    .{0,1000}(?<!xa7|paragraf)$
    

    【讨论】:

    • 好的,谢谢,出于好奇,是否可以将其更改为使用负前瞻?
    • @bryan-rasmussen 我最初试图提出一些带有负面前瞻性的东西,但没有成功。
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多