第一个问题,请保持温和。
我是一名正则表达式。我只是轻轻地涉猎。我正在试验LizardLabs的Log Parser Lizard。我正在编写一个XML,应用程序使用MS Log Parser将regex应用于日志文件,以便在漂亮的GUI中返回结果。 XML包含你定义为字段的标签,所以请原谅凌乱的代码,但这就是它想要的......
<regex>\s{1,}(?<PID>(.*))\((?<TID>(.*))\)\s{1,}(?<DATE>(\d{2}\/\d{2}\/\d{4}))\s{1,}(?<TIME>(\d{2}:\d{2}:\d{2}))\s{1,}(?<CLASS>([A-Z][^\s]{1,}))\s{1,}(?<TYPE>(.{1}))\s{1,}(?<MESSAGE>(.{1,})).*</regex>
<fields>
<field name="PID" type="String" />
<field name="TID" type="String" />
<field name="DATE" type="String" />
<field name="TIME" type="String" />
<field name="CLASS" type="String" />
<field name="TYPE" type="String" />
<field name="MESSAGE" type="String" />
</fields>
示例行:
3840(5516)03/15/2015 00:10:04 JS我开始事件截止日期更新时间表
3840(5516)03/15/2015 00:10:04 JS I没有要更新的记录
3648(5444)03/15/2015 01:00:07 JGroups版本:2.6.15.GA
正则表达式正确抓取前两行并很好地解析它,但第三行失败(显然,因为它的格式不同)。
问题:如何使用(?!JGroups)或[^ JGroups]使正则表达式正确地忽略JGroups行?
我尝试了以下内容;
(?<CLASS>([^JGroups][A-Z][^\s]{1,}))
(?<CLASS>((?!JGroups([A-Z][^\s]{1,})))
似乎都没有忽略该行(并继续匹配)。
我做错了什么?为了进一步复杂化,使用普通正则表达式(不通过此应用程序运行)似乎与我的第二个示例正常工作。是不知道如何进行这些“忽略”匹配的应用程序的错误?
答案 0 :(得分:0)
你的正则表达式中有一些奇怪的东西。
\s{1,}
您似乎想使用空格作为分隔符但实际上是在说1或0个空格
(?<CLASS>([A-Z][^\s]{1,}))
该课程是一个字母(例如&#39; J&#39;),后跟1或0个非空格字符?
如果没有日志本身的格式,我无法帮助你,但它看起来应该像这样:
\s*(?<PID>([^\s]*))\((?<TID>([^\s]*))\)\s(?<DATE>(\d{2}\/\d{2}\/\d{4}))\s(?<TIME>(\d{2}:\d{2}:\d{2}))\s(?<CLASS>([^\s]*))\s(?<TYPE>([^\s]*))\s(?<MESSAGE>(.*))