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

Regex 为什么需要否定正则表达式?,regex,regex-negation,Regex,Regex Negation,这里有很多问题,等等 我不太明白为什么人们觉得有必要否定正则表达式。 为什么不使用类似于grep-v的东西,只显示与正则表达式不匹配的结果? 可能是因为grep不是唯一使用正则表达式的地方?它在这个简单的场景中工作。。。事实上,在许多其他地方,你可以说“与这个正则表达式不匹配”。。。但是如果你只需要否定正则表达式的一部分呢?“匹配这个,但不匹配这个”你会怎么做?你不能全盘否定。我记得需要它的一个实例是在Apache配置中。在Apache中,如果当前请求与某个PCRE regexp匹配,有一种方

这里有很多问题,等等

我不太明白为什么人们觉得有必要否定正则表达式。 为什么不使用类似于
grep-v
的东西,只显示与正则表达式不匹配的结果?



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

我记得需要它的一个实例是在Apache配置中。在Apache中,如果当前请求与某个PCRE regexp匹配,有一种方法可以重定向到不同的URI,但是如果当前请求与某个regexp不匹配,就没有方法重定向(或者至少在我需要它时是这样)


谢天谢地,我能够用谷歌(实际上,我不确定谷歌是否已经存在…)搜索regexp否定regexp。但这确实花了我一些时间,如果StackOverflow在当时就存在的话,那就容易多了。

你说得对,没有必要否定整个正则表达式,但你肯定看到了在更大的模式中否定子模式的价值


下面是一个简单的示例:将字符串拆分为运行。在Java中,这只是
上的
拆分
(?regex的用途远不止
grep
,你知道……关于“regex否定”有很多问题这是因为不存在负正则表达式,正则表达式新手往往会对此感到惊讶。@Tomalak:有负外观等等……你可以否定那些
[set]
+1不知道为什么这个问题被否决了,似乎是一个有具体答案的明确问题。@马克:这不影响我的陈述。要使正则表达式成功,必须匹配一个否定的前瞻,它不会将正则表达式切换为“匹配任何内容,但”模式。正则表达式的构造必须考虑匹配,而不是排除。虽然字符类(集)可以被否定,但它们不适合排除单词或短语。
$ 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
System.out.println(java.util.Arrays.toString(
    "aaaabbbccdeeefg".split("(?<=(.))(?!\\1)")
)); // prints "[aaaa, bbb, cc, d, eee, f, g]"