【发布时间】:2015-03-16 08:49:20
【问题描述】:
第一个问题要温柔。
我是一个正则表达式学徒。我只是轻描淡写。我正在试验 LizardLabs 的 Log Parser Lizard。我正在编写一个 XML,应用程序使用 MS Log Parser 将正则表达式应用于日志文件,以在漂亮的 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 I 开始事件截止日期更新时间表
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,})))
似乎都没有让它忽略该行(并继续匹配)。
我做错了什么?更复杂的是,使用普通的正则表达式(不通过这个应用程序运行它)似乎可以在我的第二个示例中正常工作。不知道如何进行这些“忽略”匹配是应用程序的错吗?
【问题讨论】:
标签: regex xml logging regex-negation