我有这个java代码
String msg = "*1*20*11*30*IGNORE*53*40##";
String regex = "\\*1\\*(.*?)\\*11\\*(.*?)\\*(.*?)\\*53\\*(.*?)##";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(msg);
if (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
System.out.println(matcher.group((i+1)));
}
}
输出是
20
30
IGNORE
40
我如何更改正则表达式,忽略 IGNORE 字符串? 我想,匹配器找不到写在那里的任何东西。 20、30、40 所在的位置是我需要提取的值,在我的情况下 IGNORE 是任何不需要我的协议(protocol)特定计数器
最佳答案
始终忽略第三个参数:
根本不创建捕获(不使用括号)。
\\*1\\*(.*?)\\*11\\*(.*?)\\*.*?\\*53\\*(.*?)##
独立于位置忽略:
您需要像您正在做的那样捕获 IGNORE
部分,并检查您的循环是否需要忽略它:
String msg = "*1*20*11*30*IGNORE*53*40##";
String regex = "\\*1\\*(.*?)\\*11\\*(.*?)\\*(.*?)\\*53\\*(.*?)##";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(msg);
if (matcher.find()) {
for (int i = 0; i < matcher.groupCount(); i++) {
if (!matcher.group(i+1).equals("IGNORE")) {
System.out.println(matcher.group(i+1));
}
}
}
关于java - 使用正则表达式从字符串中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32759626/