我有这些字符串:
案例1:系统通过未知重载原因返回ROM - 原因是ptr 0xBFC2B644,PC 0x60452AC0,地址0x0 at 16:03:27 MSD 2006年6月8日星期四
输出应为:未知重载原因 - 原因ptr 0xBFC2B644,PC 0x60452AC0,地址0x0(“by”和“at”之间的字符串)
案例2:看门狗定时器已过期,系统返回ROM
输出应该是:看门狗定时器到期(字符串在“by”之后直到结束,因为“at”不存在)
如何使用正则表达式提取“by”和“at”之间的子字符串(如果“at”不存在则字符串从直到结束)
这个正则表达式只有当字符串具有部分字符时才能匹配子字符串。
(?&LT =通过)(。)(在)+(?在\ S + \ d \ d:\ d \ d:\ d \ d \ S ?\ d \ S + \ d \ d \ d \ d)
字符串我曾经检查过:一个SegV异常,PC 0x325D558时间:20:34:38 UTC星期六
以上正则表达式的输出:错误 - 一个SegV异常,PC 0x325D558
答案 0 :(得分:0)
(.*?by[ ]*)(.*?)(([ ]at[ ])|$)(.*?)
// Group $1 - (.*?by[ ]*) Should contain all information in front of searched text
// Group $2 - (.*?) Should contain your searched string
// Group $3 - (([ ]at[ ])|$) Should contain the word 'at' or nothing
// Group $4 - (.*?) Should contain the rest of the string, if text contains 'at'
我在Notepad ++中测试了以下字符串的正则表达式:
1。)案例1:系统通过未知的重载原因返回ROM - 原因是ptr 0xBFC2B644,PC 0x60452AC0,地址0x0 at 16:03:27 MSD Thu Jun 8 2006
2。)系统通过看门狗定时器到期返回ROM
使用$ 2组替换正则表达式时得到以下结果
1。)未知重载原因 - 原因ptr 0xBFC2B644,PC 0x60452AC0,地址0x0 2.)看门狗定时器已过期
*注意:确保您使用的语言不能处理“。”在正则表达式作为换行符。
答案 1 :(得分:0)
答案 2 :(得分:0)
by (.*?)((at\s+\d\d:\d\d:\d\d\s.*?\d\s+\d\d\d\d)$|$)
\\Group1 - Matches everything
\\Group2 - Matches the string after "at" ($ because nothing follows it)
**\d\d:\d\d:\d\d\s.*?\d\s+\d\d\d\d** matches the following kind of **string 16:03:27 MSD Thu Jun 8 2006**
这些是我得到的输出:
1。系统通过未知重装原因返回ROM - 原因是ptr 0xBFC2B644,PC 0x60452AC0,地址0x0 at 16:03:27 MSD Thu Jun 8 2006
输出:未知重载原因 - 原因ptr 0xBFC2B644,PC 0x60452AC0,地址0x0
2. 系统通过看门狗定时器过期返回ROM
输出:看门狗定时器已过期