如何使负前瞻与行尾文本一起使用

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 将匹配整个主题,因此它后面没有xa7paragraf(它后面只有$)。

你想要消极的向后看:

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

【讨论】:

好的,谢谢,出于好奇,是否可以将其更改为使用负前瞻? @bryan-rasmussen 我最初试图提出一些带有负面前瞻性的东西,但没有成功。

以上是关于如何使负前瞻与行尾文本一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何找出文本文件中的行尾?

在离子应用程序中,如何将组合框与行中的文本字段对齐

行业前瞻智慧物联网如何重塑视频监控的未来?

C++ 从文本文件检查操作系统

Linux命令中使用正则表达式

python tkinter的Text控件,如何实现插入文本后将光标自动移动到行尾