匹配可选值的正则表达式

时间:2012-04-13 20:50:47

标签: java regex

我正在尝试从Web服务器日志中提取一些信息而且它的结构不是很好,所以我遇到了麻烦,我正在尝试匹配:

示例1:

2011-11-29 11:30:23,685 DEBUG [my.fully.qualified.package.Service] Added Action Item: M= 2  Success

示例2:

2011-11-29 11:30:23,685 DEBUG [my.fully.qualified.package.Service] Added Action Item: M=10  Success

此正则表达式适用于示例1:

(\d\d\d\d-\d\d-\d\d)\s[\d|:]+,\d+\s([A-Z]+)\s\[(.+)\]\s.+:\sM=\s(\d).+

第一组是日期,第二组是日志级别,第三组是类名,第三组是M的值。

您可能已经注意到,在示例1中,M =在数字之前有一个空格,而在另一个例子中,这并不是为什么这个正则表达式不起作用。

我确实尝试了类似M=[\s|d]+的内容,但我得到了一些与我要求的匹配的字符,有人建议如何将这两个示例与一个正则表达式匹配?

3 个答案:

答案 0 :(得分:2)

您希望M=\s*(\d+)=之后立即允许零个或多个空格,但不允许在数字后面的任何空格。

答案 1 :(得分:0)

M=\s?(\d).+

允许=之后的可选空格。

答案 2 :(得分:0)

我相信你有一些拼写错误, 它应该是

M=[\s|\d]+