示例字符串:
蒲公英动物狗是蓝色的
动物猫是蓝色的
酒精动物牛是蓝色的水
我需要使用一个正则表达式来捕获所有以“ ”开头的实例,并以“ blue ”结尾,但没有这两个单词之间的单词“ cat ”。
我尝试了什么:
The.*?(?!cat)blue
期望的结果:
2匹配:
动物狗是蓝色的
动物牛是蓝色的
任何帮助都将受到极大的赞赏
答案 0 :(得分:1)
您可以使用角色类\w
(单词字符)和\W
(非单词字符)和单词边界\b
在他们之间匹配。要禁止使用单词,您只需使用否定前瞻(?!...)
(未跟随......) 在单词边界对其进行测试:
\bThe\W+(?:(?!cat\b|blue\b)\w+\W+)*blue\b
或使用perl兼容的正则表达式引擎(支持占有量词):
\bThe\W++(?:(?!cat\b|blue\b)\w+\W+)*+blue\b
这样,您确定cat
不属于scat
或catering
。
答案 1 :(得分:0)
“。*”将匹配所有内容,因此“(!!cat)”部分将继续匹配“。*”已匹配“cat”后的任何内容
我会在匹配“任何后跟蓝色的东西”之前加入条件“不匹配任何后跟猫的东西”,如下所示:
The(?!.*cat).*blue