我想解析使用正則表達式在Java8中的traceroute結果。正則表達式來捕獲跟蹤與Java8中的組
我正在使用下面的正則表達式來識別組。
^(\\d*).*[AS(\\d*)]?\\s+([\\w+\\.]+)\\s+\\(([\\d+\\.]+)\\)[\\s+(\\d+\\.\\d+)\\s+ms]+
,我需要解析了一些示例行:
1 10.33.128.1 (10.33.128.1) 4.452 ms 3.459 ms 3.474 ms
6 * [AS3356] 4.68.72.218 (4.68.72.218) 12.432 ms 11.819 ms
* 4.68.72.218 (4.68.72.218) 12.432 ms 11.819 ms
61.182.180.62 (61.182.180.62) 175.300 ms 203.001 ms
我要提取的跳數(如果有的話),ASN(如果可用),主機名,IP和時間
但與上述正則表達式匹配的字符串1,2和4這是我想要的,但只給我跳,主機和ASN。
我的代碼是這樣的:
Pattern hop_pattern = Pattern.compile(
"^(\\d*).*[AS(\\d*)]?\\s+([\\w+\\.]+)\\s+\\(([\\d+\\.]+)\\)[\\s+(\\d+\\.\\d+)\\s+ms]+")
Matcher m = hop_pattern.matcher(target);
while(m.find()) {
System.out.println("count: " + m.groupCount());
for(int i = 1; i < m.groupCount() + 1; i++) {
System.out.println(i + "->" + m.group(i));
}
}
,我需要解析了一些示例行:
1 10.33.128.1(10.33.128.1)4.452毫秒3.459毫秒3.474毫秒
6 * [AS3356] 4.68.72.218(4.68.72.218)12.432毫秒11.819毫秒
* 4.68.72.218(4.68.72.218)12.432毫秒11.819毫秒
61.182.180.62(61.182.180.62)175.300毫秒203.001毫秒
我要提取的跳數(如果有的話),ASN(如果可用),主機名,IP和時間
但上述正則表達式,它的串1,2相匹配,和4這是我想要的,但只給了我跳,主機和ASN。
我的代碼是這樣的:
Pattern hop_pattern = Pattern.compile(
"^(\\d*).*[AS(\\d*)]?\\s+([\\w+\\.]+)\\s+\\(([\\d+\\.]+)\\)[\\s+(\\d+\\.\\d+)\\s+ms]+")
Matcher m = hop_pattern.matcher(target);
while(m.find()) {
System.out.println("count: " + m.groupCount());
for(int i = 1; i < m.groupCount() + 1; i++) {
System.out.println(i + "->" + m.group(i));
}
}
我不知道,如果事情是錯誤的代碼或正則表達式本身。感謝幫助!
更新:一些例子和輸出示例
1 [AS0] 10.200.200.200(10.200.200.200)37.526毫秒35.793毫秒37.728毫秒
預期輸出: 一跳:1 ASN:0 主機名:10.200.200.200 IP:10.200.200.200 時間:[37.526,35.793,37.728]2 [AS0] scsc-usr-13500-02-eth1-07.xyz.com(10.96.15.3)37.927毫秒36.122 ms *
Ex pected輸出: 一跳:2 ASN:0 主機名:scsc-usr-13500-02-eth1-07.xyz.com IP:10.96.15.3 時間:[37.927,36.122]
我我不確定代碼或正則表達式本身是否有問題。感謝幫助!
您是否期望完整的行被打印到控制檯。完整的行是一個匹配項,但您循環遍歷組而不是打印完整行。 –
你可以在這個例子中添加一個你預期提取的樣本嗎? –
@Akur馬上跳出來的問題是你沒有在你的正則表達式中逃脫'['和']'。另外,[AS ...]匹配之前的'。*'會吞噬[AS ...]部分,因爲'*'是貪婪的。但爲了給你一個完整的答案,我們需要確切地知道你想要的輸出是什麼。 – Misha