Regex 如何否定正则表达式中的特定单词?

Regex 如何否定正则表达式中的特定单词?,regex,Regex,我知道我可以像在[^bar]中那样否定一组字符,但我需要一个正则表达式,其中否定适用于特定的单词-因此在我的示例中,我如何否定一个实际的,而不是“bar中的任何字符”您可以使用: 这些都与任何不包含条的内容相匹配您可以使用: 这些都匹配任何不包含bar的内容,除非性能是最重要的考虑因素,否则只需在第二遍中运行结果通常会更容易,跳过那些与要否定的词匹配的内容 正则表达式通常意味着您正在执行脚本编写或某种低性能任务,因此,请找到一种易于阅读、易于理解和维护的解决方案。除非性能是最重要的问题,否则只需

我知道我可以像在
[^bar]
中那样否定一组字符,但我需要一个正则表达式,其中否定适用于特定的单词-因此在我的示例中,我如何否定一个实际的
,而不是“bar中的任何字符”

您可以使用:

这些都与任何不包含
条的内容相匹配

您可以使用:


这些都匹配任何不包含
bar

的内容,除非性能是最重要的考虑因素,否则只需在第二遍中运行结果通常会更容易,跳过那些与要否定的词匹配的内容


正则表达式通常意味着您正在执行脚本编写或某种低性能任务,因此,请找到一种易于阅读、易于理解和维护的解决方案。

除非性能是最重要的问题,否则只需通过第二次运行结果通常会更容易,跳过那些与你想否定的词相匹配的词


正则表达式通常意味着您正在编写脚本或执行某种低性能任务,因此,请找到一种易于阅读、易于理解和维护的解决方案。

以下正则表达式将满足您的需要(只要支持负lookbehinds和lookaheads),并正确匹配;唯一的问题是它匹配单个字符(即,每个匹配都是单个字符,而不是两个连续“条”之间的所有字符),如果使用很长的字符串,可能会导致高开销

b(?!ar)|(?<!b)a|a(?!r)|(?<!ba)r|[^bar]

b(?!ar)|(?以下正则表达式将执行您想要的操作(只要支持负lookbehinds和lookaheads),正确匹配内容;唯一的问题是它匹配单个字符(即,每个匹配是单个字符,而不是两个连续“bar”之间的所有字符),如果使用很长的字符串,则可能会导致很高的开销

b(?!ar)|(?<!b)a|a(?!r)|(?<!ba)r|[^bar]

b(?!ar)|(?一个很好的方法是使用:

负先行结构是一对括号,左括号后跟问号和感叹号


一个很好的方法是使用:

负先行结构是一对括号,左括号后跟问号和感叹号


我只是想到了一些可以做的事情。这与我的第一个答案非常不同,因为它不使用正则表达式,所以我决定写第二个答案

在字符串上使用所选语言的
split()
等效方法,并将单词to negate作为拆分内容的参数。使用Python的示例:

>>> text = 'barbarasdbarbar 1234egb ar bar32 sdfbaraadf'
>>> text.split('bar')
['', '', 'asd', '', ' 1234egb ar ', '32 sdf', 'aadf']

这样做的好处是,至少在Python中(我不记得在Visual Basic或Java中的功能是否相同),它让您间接知道字符串中何时重复“bar”,因为“bar”之间的空字符串包含在结果列表中(尽管开头的空字符串是因为字符串开头有一个“条”)。如果您不想这样做,您只需从列表中删除空字符串。

只是想到了其他可以做的事情。这与我的第一个答案非常不同,因为它不使用正则表达式,所以我决定发布第二个答案帖子

在字符串上使用所选语言的
split()
等效方法,并将单词to negate作为拆分内容的参数。使用Python的示例:

>>> text = 'barbarasdbarbar 1234egb ar bar32 sdfbaraadf'
>>> text.split('bar')
['', '', 'asd', '', ' 1234egb ar ', '32 sdf', 'aadf']

这样做的好处是,至少在Python中(我不记得在Visual Basic或Java中的功能是否相同),它让您间接知道字符串中何时重复“bar”,因为“bar”之间的空字符串包含在结果列表中(虽然开头的空字符串是因为字符串开头有一个“bar”)。如果你不想这样做,你可以简单地从列表中删除空字符串。

我在尝试识别以下英语语句的正则表达式时遇到了这个论坛线程:

给定一个输入字符串,匹配所有内容,除非该输入字符串正好是“bar”;例如,我想匹配“barrier”和“disbar”以及“foo”

这是我想出的正则表达式

^(bar.+|(?!bar).*)$

我对正则表达式的英文翻译是“如果字符串以'bar'开头且至少有一个其他字符,或者字符串不以'bar'开头,则匹配字符串”。

我在尝试为以下英文语句识别正则表达式时遇到了此论坛线程:

给定一个输入字符串,匹配所有内容,除非该输入字符串正好是“bar”;例如,我想匹配“barrier”和“disbar”以及“foo”

这是我想出的正则表达式

^(bar.+|(?!bar).*)$

我对正则表达式的英文翻译是“如果字符串以'bar'开头且至少有一个其他字符,或者字符串不以'bar'开头,则匹配字符串”。

我有一个文件名列表,我想排除某些文件名,使用这种行为(Ruby):

以下是我的解决方案:

excluded_rgx = excluded.map{|e| e+'\.'}.join('|')
my_rgx = /(^|\/)((?!#{excluded_rgx})[^\.\/]*)\.rb$/
我对此应用程序的假设:

  • 要排除的字符串位于输入的开头,或紧跟在斜杠之后
  • 允许的字符串以
    .rb
    结尾
  • 允许的文件名在
    .rb
    前面没有
    字符

我有一个文件名列表,我想用这种行为排除某些文件名(Ruby):

以下是我的解决方案:

excluded_rgx = excluded.map{|e| e+'\.'}.join('|')
my_rgx = /(^|\/)((?!#{excluded_rgx})[^\.\/]*)\.rb$/
我对此应用程序的假设:

  • 要排除的字符串位于输入的开头,或紧跟在斜杠之后
  • 允许的字符串以
    .rb
    结尾。
    grep 'something I want' | grep --invert-match 'but not these ones'
    
    ^(?!.*STRING1|.*STRING2|.*STRING3).*$
    
    Regex = {
     'single_character': ['[]', '.', {'negate':'^'}],
     'capturing_group' : ['()', '|', '\\', 'backreferences and named group'],
     'repetition'      : ['{}', '*', '+', '?', 'greedy v.s. lazy'],
     'anchor'          : ['^', '\b', '$'],
     'non_printable'   : ['\n', '\t', '\r', '\f', '\v'],
     'shorthand'       : ['\d', '\w', '\s'],
     }
    
    ^(?!bar$).*
    
    ^(?!bar$|foo$|banana$).*
    
    ^(?!.*\bbar\b).*$
    
    ^(?s)(?!.*\bbar\b).*$
    
    ^(?!.*\bbar\b)[\s\S]*$
    
    (?!\bbar\b)\b\[A-Za-z-]*bar[a-z-]*\b