如何解决正则表达式负向后查找,匹配一个单词,只要该单词之前没有其他单词
我正在尝试创建一个简单的正则表达式,只要不带其他单词 Cats ,我就需要捕获所有 Dogs 事件。以下是一些测试正则表达式的示例:
- 我的狗很高兴->应该匹配(以有效的“我的”开头)
- 狗是人类最好的朋友->应该匹配(第一个单词,不带任何前缀)
- 这是无效的Cats Dogs->不匹配(前面带有无效的Cats单词)
- 狗和猫以及狗和狗->应该匹配(找到了多个“狗”,并且没有紧随其后的是“猫”)
- TomCats狗是有效的->应该匹配(TomCats这个词本身与Cats不同)
我正在尝试使用类似于以下的正则表达式:
((?<!\bCats\b)\s*\bDogs\b)
没有给出正确的结果(当所有情况不符合第三种情况时,它将匹配所有情况)
此外,如果我使用类似的内容:
((?<!\bCats\b)\s+\bDogs\b)
对于情况1和3,它返回正确的结果,但与情况2不匹配,因为在开始处发现了狗,并且前面没有空格。
区分大小写在这里不是问题。 我正在使用 Java 测试此正则表达式
解决方法
您非常接近解决方案。我认为此正则表达式应该起作用:
(?<!Cats)\s+Dogs|^.{0,4}Dogs
,
如果我清楚地理解了您的要求,那么您可以使用负号而不是向后看的正则表达式:
^(?!.*\bCats\s+Dogs\b).*?\bDogs\b
RegEx详细信息:
-
^
:开始 -
(?!.*\bCats\s+Dogs\b)
:如果在任何地方找到单词Cats
,然后是1+空格,然后是单词Dogs
,则负匹配将使匹配失败 -
.*?\bDogs\b
:在0个或多个字符后匹配单词Dogs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。