嘗試了這一點,它需要你的字符串,多行作爲輸入,並通過線吐出來的數字(IP的端口,並通過它的外觀)線。因爲這個問題本身就是正則表達式,所以我在閱讀過程中沒有付出太多的努力,所以我只是使用掃描儀,而不是在閱讀/編寫文本文件時煩惱,我假設你已經有了這部分。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MainRegex {
/**
* @param args
*/
public static void main(String[] args) {
String input = "SrcAddr: 0.0.21.201\n"+
"DstAddr: 7.202.10.100\n"+
"NextHop: 0.33.189.142\n"+
"InputIf: 19\n"+
"OutputIf: 50715";
Scanner scanner = new Scanner(input);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String output = matchString(line);
System.out.println(output);
}
scanner.close();
}
public static String matchString(String input){
String regex = "(?:\\w*:)((?:\\d+\\.?)*)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.find()) {
String matched = m.group(1);
return matched;
}
return null;
}
}
輸出:
0.0.21.201
7.202.10.100
0.33.189.142
19
50715
在掃描循環,可以處理線。如果您只想獲取數字,或者用String [name] =「[number]」替換每行,我無法理解您的問題。如果是這樣的話,你只需要在掃描器的循環中篡改一些內容,並且刪除正則表達式中的非捕獲組(也就是說,刪除\ w之前的「?:」),以便捕獲這些單詞。
希望它有幫助!
你能證明你所嘗試過的嗎? – Kieveli
這個問題似乎是無關緊要的,因爲它在發佈前沒有顯示研究工作。 – OGHaza