仅当行不包含另一个字符串时,正则表达式才匹配一个字符串

时间:2014-06-26 16:12:21

标签: regex

是否存在匹配一个字符串的一般正则表达式,但仅当一行不包含另一个字符串时?

E.g我想匹配单词apple,但前提是该行不包含banana。以下几行:

  1. apple banana - 与
  2. 不匹配
  3. pear apple - 匹配apple但不匹配
  4. apple pear apple - 匹配第一个和第二个苹果但不匹配梨
  5. 我知道

    ^((?!banana).)*$
    

    将匹配不包含banana的行。但我似乎无法将其与匹配的苹果结合起来。

3 个答案:

答案 0 :(得分:4)

您可以使用此PCRE正则表达式:

.*banana.*$(*SKIP)(*F)|\bapple\b

Working Demo

答案 1 :(得分:1)

无法发表评论,因为我还没有足够的声誉。但只是添加到anubhava的答案,所以像香蕉苹果香蕉的东西将起作用:

\b(?!.*banana)apple\b(?!.*banana)

编辑:

你是对的; Avinash Raj的回答看起来很有效。

答案 2 :(得分:1)

你可以试试这个正则表达式,

(?<!banana.)\b(?!.*banana)apple\b

DEMO

OR

.*?banana.*|\b(apple)\b

这将捕获字符串apple不存在的行上的字符串banana

DEMO