如何使负前瞻与行尾文本一起使用
Posted
技术标签:
【中文标题】如何使负前瞻与行尾文本一起使用【英文标题】:How to make negative lookahead work with end of line text 【发布时间】:2011-03-01 22:44:43 【问题描述】:我有一个如下的正则表达式:
.0,1000(?!(xa7|para(graf))$)
使用 Java。 我期待它会导致以下文本失败:
废话
因为在末尾找到了paragraf
【问题讨论】:
【参考方案1】:错误放置断言是一个常见的错误。如果你想使用前瞻,模式是这样的:
^(?!.*paragraph$).*$
这匹配 (as seen on rubular.com):
something something para
paragraph something something
但不匹配:
something paragraph
所以这里的关键区别在于,我们在匹配.*
(或在您的情况下为.0,1000
)之前,开始查看字符串的开头。当然,我们要找的不仅仅是paragraph$
,而是.*paragraph$
。
也就是说,要检查字符串是否以有限长度结尾,在支持时向后查找是最自然的解决方案。
^.*$(?<!paragraph)
【讨论】:
所以 ^(?!.*paragraph$).*$ 首先检查字符串是否不以段落结尾,然后检查整个字符串是否匹配 .*?【参考方案2】:这是因为.0,1000
将匹配整个主题,因此它后面没有xa7
或paragraf
(它后面只有$
)。
你想要消极的向后看:
.0,1000(?<!xa7|paragraf)$
【讨论】:
好的,谢谢,出于好奇,是否可以将其更改为使用负前瞻? @bryan-rasmussen 我最初试图提出一些带有负面前瞻性的东西,但没有成功。以上是关于如何使负前瞻与行尾文本一起使用的主要内容,如果未能解决你的问题,请参考以下文章