正则表达式 - 禁用同一行的特定子字符串

时间:2016-03-14 14:20:13

标签: java regex

我们假设我想匹配单词" cat",但在这个单词之前不应该是单词" mouse"在同一行

匹配

Hello, cat!

匹配

Hello, mouse!
Hello, cat!

不匹配

Hello, mouse and cat

但它应该正确处理任何行,例如,只有" cat"也应该匹配。 我有一个不起作用的正则表达式

(?!\bmouse\b)[^\n]*cat
是的,有人可以帮忙吗?感谢

2 个答案:

答案 0 :(得分:1)

自从我在评论中的答案为您效起之后发布。

您可以使用约束宽度lookbehind(具有限制量词的):

"(?<!\\bmouse\\b.{0,1000})\\bcat\\b"

由于已知最小和最大限制,因此引擎知道可能的后视图案长度。

请参阅regex demo

模式分解:

  • (?<!\\bmouse\\b.{0,1000}) - 检查当前位置之前是否有整个单词mouse,其中0到1000之间的任何字符都有换行符
  • \\bcat\\b - 全文cat

答案 1 :(得分:0)

尝试使用负前瞻的正则表达式:

^(?!.*?\bmouse\b.*\bcat\b).*

(?!.*?\bmouse\b.*\bcat\b)在同一行mouse之前cat出现时声明失败是负面预测。 \b用于字边界断言。

RegEx Demo