我正在使用表达式编写一个简单的正则表达式程序:
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的有效输入。请帮助我输入数据有什么问题。
答案 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})"