import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LogParser {
public static void main(String[] args) {
// 日志文本
String log = "[2023 - 10 - 01 12:00:00] INFO [Thread - 1] 系统正常运行";
// 正则表达式,用于匹配日志格式
String pattern = "\\[(.*?)\\] (.*?) \\[(.*?)\\] (.*)";
// 编译正则表达式
Pattern r = Pattern.compile(pattern);
// 创建Matcher对象
Matcher m = r.matcher(log);
if (m.find()) {
// 提取时间戳
String timestamp = m.group(1);
// 提取日志级别
String logLevel = m.group(2);
// 提取线程名
String threadName = m.group(3);
// 提取消息内容
String message = m.group(4);
System.out.println("时间戳: " + timestamp);
System.out.println("日志级别: " + logLevel);
System.out.println("线程名: " + threadName);
System.out.println("消息内容: " + message);
}
}
}
关键步骤说明
- 定义正则表达式:
\\[(.*?)\\] (.*?) \\[(.*?)\\] (.*)
,其中\\[(.*?)\\]
用于匹配中括号内的内容(时间戳和线程名),(.*?)
用于匹配非贪婪模式下的任意字符,空格用于匹配日志各部分之间的分隔符。
- 编译正则表达式:使用
Pattern.compile(pattern)
方法将正则表达式编译为Pattern
对象。
- 创建Matcher对象:通过
Pattern
对象的matcher
方法,传入要匹配的日志文本,创建Matcher
对象。
- 执行匹配并提取内容:使用
matcher.find()
方法查找匹配项,如果找到,则通过matcher.group(n)
方法提取对应的组内容,n
从1开始,分别对应正则表达式中括号中的捕获组。