2015-05-21 29 views
0

給定的字符串解析給定的字符串:如何使用正則表達式中的Java

<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"); 
     } 
    } 
} 
+0

應該輸出什麼? – Jens

+0

請添加一些信息,因爲你沒有說你想從這個字符串中提取什麼? –

回答

2

它未能因爲子字符串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+\\:.*?)(.*) 

DEMO

我想你想是這樣的。在這裏,我將逗號部分設爲可選。

\<(\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中多出一次反斜槓。

DEMO

+0

https://regex101.com/r/iR4zQ1/5 –

+1

它工作正常。非常感謝你@Avinash Raj –

相關問題