Regex Negative Lookbehind,匹配前面没有其他词的词
Regex Negative Lookbehind, match a word as long as is not precede by other word
我正在尝试创建一个简单的正则表达式,我需要在其中捕获所有出现的 Dogs,只要它前面没有另一个词 Cats。以下是一些测试正则表达式的示例:
- 我的狗很开心 -> 应该匹配(前面是有效的“我的”)
- Dogs are humans best friend -> 应该匹配(第一个单词,前面没有任何内容)
- 这是无效的 Cats Dogs -> 不应匹配(前面有一个无效的单词 Cats)
- The Dogs and Cats and Dogs and Dogs -> 应该匹配(找到多个“Dogs”并且 none 前面紧跟着“Cats”)
- TomCats Dogs 是有效的 -> 应该匹配(TomCats 本身是一个不同于 Cats 的词)
我正在尝试使用与此类似的正则表达式:
((?<!\bCats\b)\s*\bDogs\b)
没有给出正确的结果(它匹配了所有不应该匹配第三种情况的情况)
此外,如果我使用类似的东西:
((?<!\bCats\b)\s+\bDogs\b)
它 returns 案例 1 和 3 的正确结果,但它不匹配案例 2,因为 Dogs 是在开头找到的,并且它前面没有白色 space.
这里区分大小写不是问题。
我正在使用 Java 来测试这个正则表达式
您已经非常接近解决方案了。我认为这个正则表达式应该有效:
(?<!Cats)\s+Dogs|^.{0,4}Dogs
如果我清楚地理解您的要求,那么您可以使用此正则表达式进行否定前瞻而不是后视:
^(?!.*\bCats\s+Dogs\b).*?\bDogs\b
正则表达式详细信息:
^
: 开始
(?!.*\bCats\s+Dogs\b)
:如果我们发现单词 Cats
后跟 1+ 空格后跟单词 Dogs
任何地方 ,则否定前瞻会使匹配失败
.*?\bDogs\b
:在0个或多个字符 之后匹配词Dogs
我正在尝试创建一个简单的正则表达式,我需要在其中捕获所有出现的 Dogs,只要它前面没有另一个词 Cats。以下是一些测试正则表达式的示例:
- 我的狗很开心 -> 应该匹配(前面是有效的“我的”)
- Dogs are humans best friend -> 应该匹配(第一个单词,前面没有任何内容)
- 这是无效的 Cats Dogs -> 不应匹配(前面有一个无效的单词 Cats)
- The Dogs and Cats and Dogs and Dogs -> 应该匹配(找到多个“Dogs”并且 none 前面紧跟着“Cats”)
- TomCats Dogs 是有效的 -> 应该匹配(TomCats 本身是一个不同于 Cats 的词)
我正在尝试使用与此类似的正则表达式:
((?<!\bCats\b)\s*\bDogs\b)
没有给出正确的结果(它匹配了所有不应该匹配第三种情况的情况)
此外,如果我使用类似的东西:
((?<!\bCats\b)\s+\bDogs\b)
它 returns 案例 1 和 3 的正确结果,但它不匹配案例 2,因为 Dogs 是在开头找到的,并且它前面没有白色 space.
这里区分大小写不是问题。 我正在使用 Java 来测试这个正则表达式
您已经非常接近解决方案了。我认为这个正则表达式应该有效:
(?<!Cats)\s+Dogs|^.{0,4}Dogs
如果我清楚地理解您的要求,那么您可以使用此正则表达式进行否定前瞻而不是后视:
^(?!.*\bCats\s+Dogs\b).*?\bDogs\b
正则表达式详细信息:
^
: 开始(?!.*\bCats\s+Dogs\b)
:如果我们发现单词Cats
后跟 1+ 空格后跟单词Dogs
任何地方 ,则否定前瞻会使匹配失败
.*?\bDogs\b
:在0个或多个字符 之后匹配词
Dogs