我们假设我想匹配单词" cat",但在这个单词之前不应该是单词" mouse"在同一行
匹配
Hello, cat!
匹配
Hello, mouse!
Hello, cat!
不匹配
Hello, mouse and cat
但它应该正确处理任何行,例如,只有" cat"也应该匹配。 我有一个不起作用的正则表达式
(?!\bmouse\b)[^\n]*cat
是的,有人可以帮忙吗?感谢
答案 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
用于字边界断言。