Java 使用单个正则表达式验证每一行
我正在用Java编写一个应用程序,它应该与外部设备通信。设备使用以下格式响应Java 使用单个正则表达式验证每一行,java,regex,Java,Regex,我正在用Java编写一个应用程序,它应该与外部设备通信。设备使用以下格式响应 01 02 05 0A 2D 3E 01 02 12 2B 09 07 作为回应,我可能至少收到一行,但通常有几行 我试图用一个简单的正则表达式验证响应 ([0-9a-fA-F]{2} ?){6}\r 但如果至少有一行是正确的,它将返回true,我需要验证所有行。 我知道我可能会将响应拆分为单独的行,并在循环中验证每一行,但问题是-是否可以使用单个正则表达式验证所有行 更新(我正在使用的Java代码): 如果至少有
01 02 05 0A 2D 3E
01 02 12 2B 09 07
作为回应,我可能至少收到一行,但通常有几行
我试图用一个简单的正则表达式验证响应
([0-9a-fA-F]{2} ?){6}\r
但如果至少有一行是正确的,它将返回true,我需要验证所有行。
我知道我可能会将响应拆分为单独的行,并在循环中验证每一行,但问题是-是否可以使用单个正则表达式验证所有行
更新(我正在使用的Java代码):
如果至少有一行是正确的,则返回true
这是因为find
方法试图在输入中找到可以与正则表达式匹配的子字符串。如果要检查整个输入是否与我的正则表达式匹配,请使用matches()
还有,你的正则表达式
([0-9a-fA-F]{2} ?){6}\r
只能匹配以\r
结尾的一行。要让正则表达式接受更多行,只需将其放在括号中,并在其后添加+
(([0-9a-fA-F]{2} ?){6}\r\n?)+
我在\r
之后添加了可选的\n
,以防行分隔符可能是\r\n
。如果最后一行不包含行分隔符,也可以使用(\r\n?|$)
最后一件事是,正如您已经知道的,您的代码示例包含q
,而不是0
,这会阻止正则表达式匹配
所以试着这样做
Pattern pattern = Pattern.compile("(?:([0-9a-fA-F]{2} ?){6}\r)+");
String string = "01 02 05 0A 2D 3E\r01 02 12 2B 09 07\r";
Matcher matcher = pattern.matcher(string);
if (matcher.matches()) {
System.out.println(matcher.group());
}
如果至少有一行是正确的,则返回true
我们可以看到您正在使用的代码吗?抱歉等待。我贴出了答案,应该可以解释你们的问题。谢谢!从您的代码中,我发现我的问题是我使用了错误的方法find()
,而不是match()
。
Pattern pattern = Pattern.compile("(?:([0-9a-fA-F]{2} ?){6}\r)+");
String string = "01 02 05 0A 2D 3E\r01 02 12 2B 09 07\r";
Matcher matcher = pattern.matcher(string);
if (matcher.matches()) {
System.out.println(matcher.group());
}