我正在尝试使用 Java 正则表达式来提取数据。它匹配我的数据,但我无法获取组数据。我正在尝试获取数据 1,xmlAggregator,268803451,3。查看文档,我假设如果我将 () 放在\d+ 和\w+ 周围,我会得到组内的数字和字符串。关于如何更改正则表达式的任何建议?
字符串:
Span(trace_id:1, name:XmlAggregator, id:268803451, parent_id:3)
Java代码:
String pattern="Span\\(trace_id:(\\d+), name:(\\w+), id:(\\d+), parent_id:(\\d+), (duration:(\\d+))*"; Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line); int count = 0; while(m.find()) { System.out.println("Match number "+count); System.out.println("start(): "+m.start()); System.out.println("end(): "+m.end()); System.out.println("Found value: " + m.group(count) ); count++; }
输出:
Match number 0 start(): 0 end(): 64 Found value: Span(trace_id:1, name:XmlAggregator, id:268803451, parent_id:3,
希望得到:
Found value: 1 Found value: XmlAggregator Found value: 268803451 Found value: 3
最佳答案
您可以使用 group
访问捕获组(未转义括号内的匹配部分)匹配结果的方法:
System.out.println("Trace ID = " + m.group(1));
System.out.println("Name = " + m.group(2));
// etc...
请注意,您从 1 而不是 0 开始计算捕获组。这是因为组 0 对应于整个匹配字符串。
关于java - 获取正则表达式数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273079/