Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用单个正则表达式验证每一行_Java_Regex - Fatal编程技术网

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代码): 如果至少有

我正在用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());
}