如何否定Java中的任何正则表达式

我有一个我想要否定的正则表达式,例如

/(.{0,4}) 

哪个String.matches返回以下内容

 "/1234" true "/12" true "/" true "" false "1234" false "/12345" false 

有没有办法否定(仅使用regx)以上结果,以便结果是:

 "/1234" false "/12" false "/" false "" true "1234" true "/12345" true 

我正在寻找一种适用于任何regx的通用解决方案,而无需重写整个正则表达式。

我看过以下如何否定整个正则表达式? 使用(?!pattern),但这对我来说似乎不起作用。

以下regx

 (?!/(.{0,4})) 

返回以下内容:

 "/1234" false "/12" false "/" false "" true "1234" false "/12345" false 

这不是我想要的。 任何帮助,将不胜感激。

你需要添加锚点。 原始正则表达式(减去不需要的括号):

 /.{0,4} 

…匹配包含斜杠后跟零到四个字符的字符串。 但是,因为你正在使用matches()方法,所以它会自动锚定,就像它真的一样:

 ^/.{0,4}$ 

为了达到这个目的,你不能依靠自动锚定; 你必须至少在前瞻中明确表明结束锚。 您还必须使用.* “填充”正则表达式,因为matches()要求正则表达式使用整个字符串:

 (?!/.{0,4}$).* 

但我建议您明确锚定整个正则表达式,如下所示:

 ^(?!/.{0,4}$).*$ 

它没有任何害处,它使你的意图非常清楚,特别是对于那些从Perl或JavaScript等其他版本学习正则表达式的人。 matches()方法的自动锚定非常不寻常。