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]"