正则表达式给出了错误的结果

时间:2017-11-03 06:56:53

标签: java regex

我正在使用表达式编写一个简单的正则表达式程序:

uid=swg2*([C]?[1247]\d{6})

最初我尝试使用在线regex tool获取此表达式的有效输入字符串,并获得一个有效的示例字符串uid=swg2C1\dddddd

我也在我的Java程序中尝试使用uid=swg2C1\\123456但遇到同样的问题。

现在,如果我在我的Java程序中使用它,那么它无法按预期工作:

public static void main(String[] args) {
    String input = "uid=swg2C1\\dddddd"; // Tried with "uid=swg2C1\\123456", same issue
    if (Pattern.compile("uid=swg2*([C]?[1247]\\d{6})").matcher(input).find()) {
        System.out.println("valid input");
    } else {
        System.out.println("invalid input");
    }
}

如果我运行此程序,我将收到消息作为无效输入。但我的字符串是online tool的有效输入。请帮助我输入数据有什么问题。

1 个答案:

答案 0 :(得分:2)

你没有逃脱你的反斜杠!

uid=swg2*([C]?[1247]\\d{6})
                    ^^
             These should be escaped!

在Java代码中,如果你没有转义它们,Java代码中的两个反斜杠将成为正则表达式中的一个\。这意味着引擎会像这样处理字符串:

uid=swg2*([C]?[1247]\d{6})

\d表示数字,因此引擎认为您正在尝试匹配6位数字!

所以,请记住在每个\之前再添加一个\来逃避它们:

"uid=swg2*([C]?[1247]\\\\d{6})"