Java否定前瞻不起作用

时间:2016-08-04 11:18:41

标签: java regex annotations

我有以下正则表达式^(?!0{8}),它应匹配任何不是8个零的字符串。我不明白为什么这不起作用。即,12345678不匹配。

我需要使用正则表达式,因为我在@Pattern注释中使用它,所以我不能只进行相等检查。

我在这个网站上https://regex101.com/进行了测试,看起来很不错。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你的正则表达式犯了一些错误。检查字符串是否只包含8个零。 (根据您的问题,这是您要避免的)可以使用正则表达式"^(0{8})$"完成。如果一行中有8个零,则此正则表达式将返回true,这是字符串中的唯一内容。 ^匹配开头和 $匹配结尾。

您可以使用java来否定结果。

    String s = "123456789";
    System.out.println(!s.matches("^(0{8})$"));

答案 1 :(得分:2)

您的前瞻缺少字符串锚点的$结束,并且不允许匹配任何以 8个零开头的字符串

您需要使用

^(?!0{8}$)
        ^

或 - 如果注释模式必须与整个字符串匹配:

^(?!0{8}$).*$