Java正则表达式日期字符串
我需要帮助创建将解析以下字符串的正则表达式:Java正则表达式日期字符串,java,regex,Java,Regex,我需要帮助创建将解析以下字符串的正则表达式: 09-22-11 12:58:40 SEVERE ...ractBlobAodCommand:104 - IllegalStateException: version:1316719189017 not found in recent history Dump: /data1/aafghani/dev/devamir/logs/dumps/22i1
09-22-11 12:58:40 SEVERE ...ractBlobAodCommand:104 - IllegalStateException: version:1316719189017 not found in recent history Dump: /data1/aafghani/dev/devamir/logs/dumps/22i125840.dump
对我来说,最困难的部分是分析日期。我并不是Java正则表达式方面的专家-非常感谢您的帮助。您确定这就是您所需要的吗?我会考虑在分隔符或列上拆分字符串,并使用现有的日期解析库来重做。 你确定这就是你需要的吗?我会考虑在分隔符或列上拆分字符串,并使用现有的日期解析LIBS来执行重载。 < P>如果要提取日期(没有时间戳): 在java中,它应该是
String regex = "^\\d{2}-\\d{2}-\\d{2}"
如果要提取日期(无时间戳): 在java中,它应该是
String regex = "^\\d{2}-\\d{2}-\\d{2}"
不要用正则表达式解析日期。而是使用SimpleDataFormat对象 e、 g
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类Foo001{
公共静态void main(字符串[]args){
String test=“09-22-11 12:58:40严重…ractBlobAodCommand:104-非法状态异常:版本:1316719189017在最近的历史转储中未找到:/data1/aafghani/dev/devamir/logs/dumps/22i125840.Dump”;
Pattern=Pattern.compile((?不使用正则表达式解析日期,而是使用SimpleDataFormat对象
e、 g
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类Foo001{
公共静态void main(字符串[]args){
String test=“09-22-11 12:58:40严重…ractBlobAodCommand:104-非法状态异常:版本:1316719189017在最近的历史转储中未找到:/data1/aafghani/dev/devamir/logs/dumps/22i125840.Dump”;
Pattern=Pattern.compile((?可用于日期):
^\d\d-\d\d-\d\d可用于日期:
^\d\d-\d\d-\d\d
这个问题有点误导,因为它意味着需要
将日期解析为java.util.date
对象或类似对象。实际
问题是如何将输入数据拆分为所需字段:
- 日期
- 水平仪
- 位置名称和行
- 异常名称和消息
- 转储文件
这是一个使用正则表达式的解决方案
String pattern=“^(\\d{2}-\\d{2}-\\d{2}\\d{2}:\\d{2}:\\d{2})”//日期
+“[]+(严重|警告|信息|配置|精细|精细|精细)//level
+“[]+([^::]+):(\\d+)//位置名称,位置行
+“[]+-[]+([^:]+):(.*?)//异常名称,异常消息
+“[]+转储:([a-zA-Z0-9\\./]+)”//转储
+ "$";
Pattern regex=Pattern.compile(Pattern);
String input=“09-22-11 12:58:40严重…ractBlobAodCommand:104-非法状态异常:版本:1316719189017在最近的历史转储中未找到:/data1/aafghani/dev/devamir/logs/dumps/22i125840.Dump”;
匹配器m=正则表达式匹配器(输入);
assertTrue(m.matches());
assertSame(7,m.groupCount());
对于(int i=1;i
这个问题有点误导,因为它意味着需要
将日期解析为java.util.date
对象或类似对象。实际
问题是如何将输入数据拆分为所需字段:
- 日期
- 水平仪
- 位置名称和行
- 异常名称和消息
- 转储文件
这是一个使用正则表达式的解决方案
String pattern=“^(\\d{2}-\\d{2}-\\d{2}\\d{2}:\\d{2}:\\d{2})”//日期
+“[]+(严重|警告|信息|配置|精细|精细|精细)//level
+“[]+([^::]+):(\\d+)//位置名称,位置行
+“[]+-[]+([^:]+):(.*?)//异常名称,异常消息
+“[]+转储:([a-zA-Z0-9\\./]+)”//转储
+ "$";
Pattern regex=Pattern.compile(Pattern);
String input=“09-22-11 12:58:40严重…ractBlobAodCommand:104-非法状态异常:版本:1316719189017在最近的历史转储中未找到:/data1/aafghani/dev/devamir/logs/dumps/22i125840.Dump”;
匹配器m=正则表达式匹配器(输入);
assertTrue(m.matches());
assertSame(7,m.groupCount());
对于(int i=1;i您需要哪些字段?示例中的字段应该是什么?数据如何变化?Hi TJ-我想要日期、严重性、类名和行号、异常消息和转储文件。您需要哪些字段?示例中的字段应该是什么?数据如何变化?Hi TJ-我想要日期、服务器y、 类名和行号、异常消息和转储文件。但首先我需要解析日期对象。但首先我需要解析日期对象。如何使转储文件成为可选的TJ?是否使用()?+“[]+(?:(?:dump:)([a-zA-Z0-9\\\\./]+)?“//dump如何使转储文件成为可选的TJ?是否使用()?+“[]+(?:(?:转储:)([a-zA-Z0-9\\./]+)?”//转储
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Foo001 {
public static void main(String[] args) {
String test = " 09-22-11 12:58:40 SEVERE ...ractBlobAodCommand:104 - IllegalStateException: version:1316719189017 not found in recent history Dump: /data1/aafghani/dev/devamir/logs/dumps/22i125840.dump";
Pattern pattern = Pattern.compile("(?<=^\\s+)\\d[\\d -:]+\\d+(?=\\s+)");
Matcher matcher = pattern.matcher(test);
if (matcher.find()) {
String dateString = matcher.group();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yy HH:mm:ss");
try {
Date date = sdf.parse(dateString);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}