代码之家  ›  专栏  ›  技术社区  ›  Aakash Goel

为什么需要否定正则表达式?

  •  2
  • Aakash Goel  · 技术社区  · 15 年前

    有这么多问题 regex-negation 就这样。

    我不确定我明白为什么人们觉得有必要否定一个正则表达式。 为什么不使用 grep -v 只显示与regex不匹配的结果?


    $ ls
    april  august  december  february  january  july  june  march  may  november  october  september
    $ ls | grep ber
    december
    november
    october
    september
    $ ls | grep -v ber
    april
    august
    february
    january
    july
    june
    march
    may
    
    3 回复  |  直到 15 年前
        1
  •  9
  •   mpen    15 年前

    可能是因为 grep 不是唯一使用正则表达式的地方吗?它在这个简单的场景中工作…实际上,在很多其他地方,你可以说 匹配这个regex“…但是…如果你只需要否定正则表达式的一部分呢?”匹配这个,但不匹配这个“你会怎么做?你不能只否定整个事情。

        2
  •  2
  •   Community CDub    8 年前

    你是对的,没有必要否定整个regex,但你肯定看到了在更大的模式中否定子模式的价值吗?

    下面是一个简单的例子:将一个字符串拆分为多个部分。在爪哇,这简直就是一个 split (?<=(.))(?!\1) .

    System.out.println(java.util.Arrays.toString(
        "aaaabbbccdeeefg".split("(?<=(.))(?!\\1)")
    )); // prints "[aaaa, bbb, cc, d, eee, f, g]"
    

    正则表达式为:

    • (?<=(.)) -向后看并将角色捕获到 \1
    • (?!\1) -向前看,否定一场比赛 1

    相关问题

    所有这些问题都使用否定的断言:

        3
  •  0
  •   Jörg W Mittag    15 年前

    我记得需要它的一个实例是在Apache配置中。在Apache中,如果当前请求与某个PCRE regexp匹配,有一种方法可以重定向到另一个URI,但如果当前请求,则没有方法重定向(或者至少在需要时返回)。 匹配一个正则表达式。

    谢天谢地,我能够谷歌(实际上,我不确定谷歌已经存在…)的一个regexp否定regexp。但这确实花了我一段时间,如果stackoverflow早就存在的话,那么 许多的 更容易的。