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

Regex 仅当行不包含另一个字符串时,正则表达式才匹配一个字符串,regex,Regex,是否有一个通用正则表达式用于匹配一个字符串,但仅当一行不包含另一个字符串时 例如,我想匹配单词apple,但前提是该行不包含banana。因此,以下几行: 苹果香蕉-不匹配 梨形苹果-与苹果匹配,但与梨不匹配 apple-pear-apple-匹配第一个和第二个苹果,但不匹配梨 我知道 ^((?!banana).)*$ 将匹配不包含香蕉的行。但我似乎无法仅将其与匹配的apple结合起来。您可以使用此PCRE正则表达式: .*banana.*$(*SKIP)(*F)|\bapple\b 不能评

是否有一个通用正则表达式用于匹配一个字符串,但仅当一行不包含另一个字符串时

例如,我想匹配单词
apple
,但前提是该行不包含
banana
。因此,以下几行:

  • 苹果香蕉
    -不匹配
  • 梨形苹果
    -与苹果匹配,但与梨不匹配
  • apple-pear-apple
    -匹配第一个和第二个苹果,但不匹配梨
  • 我知道

    ^((?!banana).)*$
    

    将匹配不包含香蕉的行。但我似乎无法仅将其与匹配的apple结合起来。

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

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

    不能评论,因为我还没有足够的声誉。但为了补充anubhava的答案,香蕉苹果香蕉之类的东西会起作用:

    \b(?!.*banana)apple\b(?!.*banana)
    
    编辑:


    你是对的;阿维纳什·拉吉的答案看起来很有效。

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

    (?<!banana.)\b(?!.*banana)apple\b
    
    这将在字符串
    banana
    不存在的行中捕获字符串
    apple


    您可能只需要两个正则表达式。有没有非常迫切的需要一次完成?那“香蕉苹果”呢?这是一个可行的选择吗?你使用哪种正则表达式风格?是PCRE吗?regex的味道是PCRE,是的。香蕉苹果是可能的是的-我不想与任何一行匹配banana@Michelle也许,我不确定。该应用程序用于文本编辑器的XML C++ .LAN文件中的语法突出显示。我想匹配
    /
    字符,但这破坏了注释结构
    /
    。也许有不同的方法来解决这个问题,但这个问题已经证明是一个相当有趣的学术练习,不管怎样,路线仍然可以包含香蕉:“梨-香蕉-苹果”哎呀,说得好,米歇尔,我没有检查这个组合。现在还不被接受…@anubhava这一次你似乎得到了:D-更多的排列。我会等一会儿再接受,看看有没有人贴柜台-example@Piyuesh不在regex101上,那就过去了fine@anubhava您可以简单地使用静态匹配
    梨香蕉苹果
    .*?banana.*|\b(apple)\b