给定字符串:
<180>May 19 17:54:27 ise121 CISE_Internal_Operations_Diagnostics 0000046406 2 0 2015-05-19 17:54:27.930 +05:30 0000290168 34126 WARN System-Management: Remote syslog target is unavailable
我的正则表达式:
\\<(\\d+)\\>(\\w+[\\d\\s\\:]+\\S+\\s\\S+\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\d\\:\\-\\.\\+\\s]{0,30})\\s+\\d+)\\s+(\\d+)\\s+(\\S+)\\s+(\\S+\\:.*?\\,)(.*)
但这不起作用,所以请帮忙
代码:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchMoreLogsFromSingleRegEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = "<180>May 19 17:54:27 ise121 CISE_Internal_Operations_Diagnostics 0000046406 2 0 2015-05-19 17:54:27.930 +05:30 0000290168 34126 WARN System-Management: Remote syslog target is unavailable";
Pattern pattern = Pattern
.compile("\\<(\\d+)\\>(\\w+[\\d\\s\\:]+\\S+\\s\\S+\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\d\\:\\-\\.\\+\\s]{0,30})\\s+\\d+)\\s+(\\d+)\\s+(\\S+)\\s+(\\S+\\:.*?\\,)(.*)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println("true");
StringBuilder sb = new StringBuilder();
int cnt = matcher.groupCount();
System.out.println(cnt);
for (int i = 1; i <= cnt; ++i) {
System.out.println(matcher.group(i) + "\t" + i);
}
} else {
System.out.println("false");
}
}
}
最佳答案
它无法工作,因为子字符串 System Management:
后面不存在逗号。因此删除最后一个逗号。
\\<(\\d+)\\>(\\w+[\\d\\s\\:]+\\S+\\s\\S+\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\d\\:\\-\\.\\+\\s]{0,30})\\s+\\d+)\\s+(\\d+)\\s+(\\S+)\\s+(\\S+\\:.*?)(.*)
我想你想要这样的东西。这里我将逗号部分设为可选。
\<(\d+)\>(\w+[\d\s\:]+\S+\s\S+\s(\d+)\s(\d+)\s(\d+)\s([\d\:\-\.\+\s]{0,30})\s+\d+)\s+(\d+)\s+(\S+)\s+(\S+\:(?:.*?,)?)(.*)
在 java 中再次转义反斜杠。
关于java - 如何在java中使用正则表达式解析给定的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366634/