gpt4 book ai didi

java - 使用单个正则表达式验证每一行

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:11 25 4
gpt4 key购买 nike

我正在用 Java 编写一个应用程序,该应用程序应该与外部设备进行通信。设备使用以下格式响应

01 02 05 0A 2D 3E
01 02 12 2B 09 07

作为回复,我可能会收到至少一行,但通常会有几行。

我尝试使用简单的正则表达式验证响应

([0-9a-fA-F]{2} ?){6}\r

但如果至少一行是正确的,它会返回 true,并且我需要验证所有行。我知道我可以将响应拆分为单独的行并在循环中验证每个行,但问题是 - 是否可以使用单个正则表达式验证所有行?

更新(我正在使用的Java代码):

Pattern pattern = Pattern.compile("([0-9a-fA-F]{2} ?){6}\r");
String string = "01 02 05 qA 2D 3E\r01 02 12 2B 09 07\r"; // qA - 4th number is invalid

Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
System.out.println(matcher.group());
}

最佳答案

it returns true if at least one line is correct

这是因为 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());
}

关于java - 使用单个正则表达式验证每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com