Java负向前视不工作
我有以下正则表达式^(?!0{8})
,它应该匹配任何不是8个零的字符串。我看不出为什么这不起作用。 I.e,12345678不符。Java负向前视不工作
我需要使用正则表达式,因为我在@Pattern
注释中使用了这个,所以我不能只进行相等性检查。
我在这个网站上测试过它https://regex101.com/,它看起来非常好。
任何想法?
你在你的正则表达式中犯了一些错误。检查一个字符串是否只包含8个零。 (根据你的问题,这是你想要避免的)可以用正则表达式"^(0{8})$"
完成。如果一行中有8个零,这个正则表达式将返回true,并且这是字符串中的唯一内容。 ^
匹配开头, $
匹配结束。
您可以使用java来否定结果。
String s = "123456789";
System.out.println(!s.matches("^(0{8})$"));
嗯,我认为这里根本不需要正则表达式,如果这种方法解决了OP问题。我认为OP正则表达式更长更复杂,并且查找是必要的,但是没有看到确切的代码和示例输入,我不确定。 –
其实我想要那个消极的,所以不是8个零。我需要使用正则表达式,因为我在@Pattern注释中使用了这种方法,所以我不能只进行相等性检查。 – wybourn
@wybourn是的,你可以用Java否定它。检查更新答案 –
你先行缺乏字符串锚的$
结束,并禁止匹配开始 8个零的任何字符串。
您需要使用
^(?!0{8}$)
^
或 - 如果标注模式必须匹配整个字符串:
^(?!0{8}$).*$
此外,如果您有其他问题,[*注释和正则表达式*](http://*.com/questions/9978199/annotation-regex)线程可能会有所帮助。 –
显示您的Java代码 –
*应匹配任何字符串不是8个零* - 不,它不会,因为这是一个不会消耗任何东西的前瞻。使用'(?s)^(?! 0 {8} $)。* $'应该有效。 –
要添加到Wiktor的评论:正则表达式实际上只匹配行的开头。然后它检查开始后面没有8个零。那么你应该真正匹配你想要的。例如:。*将匹配任何内容。 \ d {8}将匹配8位数字。 –