我打开这个问题是因为我原来的问题似乎需要一个新的方向:我原来的问题
我想创建一个正则表达式,可以从以下类型的日志条目中提取静态消息和动态消息:
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 TYPE 静态消息;动态消息
/long/file/name/with.dots.and.extension:Jan 01 12:00:00 MODULE.NAME TYPE THREAD.OR.CONNECTION.INFORMATION 静态消息;动态消息
一种日志条目类型具有简单的结构:
file:date TYPE STATIC;DYNAMIC
尝试用正则表达式解析时,另一个不是那么简单:
file:date MODULE.NAME TYPE CONNECTION.OR.THREAD STATIC;DYNAMIC
其中MODULE.NAME
andCONNECTION.OR.THREAD
要么都存在要么不存在。
到目前为止,我适用于第一种日志条目的正则表达式是:
(?:.*?):(?:\w{3} \d{1,2} \d{1,2}:\d{1,2}:\d{1,2})(?:\s+?)(?:[\S|\.]*?(?:\s*?))?(?:(?:TYPE1)|(?:TYPE2)|(?:TYPE3))(?:\s+?)(?:\S+?(?:\s+?))?(.+){1}(?:;(.+)){1}
但每当我进入第二种类型的条目时,我也会将 CONNECTION.OR.THREAD 作为我的第一个捕获组的一部分。
我希望有一种方法来使用前瞻或后视功能,以便我可以捕获STATIC
并DYNAMIC
忽略该CONNECTION.OR.THREAD
部分(如果有MODULE.NAME
?
我希望这个问题很清楚,如果看起来有点暗淡,请参考我的原作。谢谢你。
编辑:澄清。日志的每一行都不同,每一行都以文件路径开头,然后:
是日期,格式如下:MMM DD HH:MM:SS
然后它变得很棘手,要么是MODULE.NAME
变化的,其次是变化的,然后是TYPE
变化CONNECTION.OR.THREAD
的变化,或只有TYPE
. 之后有STATIC MESSAGE
then a ;
then aDYNAMIC MESSAGE
静态和动态消息都不同,该术语的使用STATIC
仅仅是因为错误可能是例如“无法连接到服务器;server1.com”所以错误的静态部分是“无法连接到服务器”,动态部分是“server1.com”