簡體   English   中英

正則表達式永遠不匹配

[英]Regular expression never matches

我的日志文件中包含以下條目:

09-22-11 12:35:09 1ms   INFO         ...erChangeSetListener:91           11  processing changeSet for class:4328,at version:1316720109100
09-22-11 12:35:09 779ms INFO         ...erChangeSetListener:91           11  processing changeSet for class:4334,at version:1316720109882
09-22-11 12:35:09 1ms   INFO         ...erChangeSetListener:91           11  processing changeSet for class:4328,at version:1316720109882
09-22-11 12:35:11 1s    WARNING      QueryServiceImpl:100                -   no existing index for class:4328
09-22-11 12:35:11       SEVERE       QueryRequest:107                    7   Aod query resulted in error:No index available for class:4328
09-22-11 12:35:11       SEVERE       AuthenticationTask:48               -   EndUserException: an error occurred when processing the query                                  Dump: /data1/amir/dev/devots/logs/dumps/22i123511.dump

我正在將此正則表達式應用於:

 final String pattern = "^(\\d{2}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})"  //date
                        + "[.]*" //ignore for now
                        + "(SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST)" //severity
                        + "[.]*"; //ignore the rest for now

 final Pattern regex = Pattern.compile(pattern);
 final Matcher m = regex.matcher(currentLine);
 if (m.matches()) {
     for (int i = 1; i <= m.groupCount(); i++) {
         System.out.format("[%d] \"%s\"%n", i, m.group(i));
     }
 }

但是我的比賽永遠不會返回真。 我不明白為什么。 我想彈性地處理這些不同類型的條目。 請注意,最后一個日志條目具有與其關聯的轉儲文件。

問題出在這里:

                    + "[.]*" //ignore for now

"[.]*"中的點僅與文字點匹配,而沒有通常的含義“任何非行分隔符”。 您需要".*"

您不能執行[.]* .*就足夠了。 您需要任何字符,而不是點。

在此處測試您的正則表達式: http//regexpal.com/

從一個非常簡單的匹配開始,並開始逐漸增加復雜性。

另外,為清楚起見,請考慮將您的組命名為:

^(?<date>\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*(?<type>SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST).*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM