[英]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.