正则表达式:捕获中间没有特定字符串的两个单词之间的所有内容

时间:2018-04-19 20:19:53

标签: regex

示例字符串:

  

蒲公英动物狗是蓝色的

     

动物猫是蓝色的

     

酒精动物牛是蓝色的水

我需要使用一个正则表达式来捕获所有以“ ”开头的实例,并以“ blue ”结尾,但没有这两个单词之间的单词“ cat ”。

我尝试了什么:

The.*?(?!cat)blue

期望的结果:

  

2匹配:

     

动物狗是蓝色的

     

动物牛是蓝色的

任何帮助都将受到极大的赞赏

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不属于scatcatering

答案 1 :(得分:0)

“。*”将匹配所有内容,因此“(!!cat)”部分将继续匹配“。*”已匹配“cat”后的任何内容

我会在匹配“任何后跟蓝色的东西”之前加入条件“不匹配任何后跟猫的东西”,如下所示:

The(?!.*cat).*blue