我正在尝试将以下字符串与安全系统的接口匹配:
*3824 04:57:04 24/02/16 ALARM(DC4) Input 1 (SI)Main Door Opened(DC2)
请注意,(DC4)
/ (SI)
/ (DC2)
只是ASCII字符的可视化表示,因此串行端口上的输入将是单个字节,而不是4/5字节
系统将继续以与上述类似的格式发送消息,我需要检查每个消息并查看是否需要进一步处理。
单词ALARM是我的关键字,所以如果没有ALARM的消息出现,那么我将忽略它(MATCH失败)。
如果消息中出现单词ALARM,那么我需要获取事件的位置并传递到我的应用程序中的其他层。
样品1 * 3824 04:57:04 24/02/16报警(DC4)输入1(SI)主门打开(DC2)
样本2 * 3824 04:57:04 24/02/16报警(DC4)输入2(SI)后门打开(DC2)
所以我需要在(SI)和(DC2)ASCII字符之间提取所有内容作为字符串以便进一步处理。
因此消息1将匹配“打开主门”,消息2将匹配“后门打开”。
如果匹配成功,应用程序中的其他层将从相应的Group#字段中提取此字符串。
谢谢,
丹尼尔。
答案 0 :(得分:0)
试试这个:
([A-Z]+)(?:[^\)]+.){2}([^\(]+)
输入:
*3824 04:57:04 24/02/16 ALARM(DC4) Input 1 (SI)Main Door Opened(DC2)
输出:
MATCH 1
1. [24-29] `ALARM`
2. [47-63] `Main Door Opened`
答案 1 :(得分:0)
这是第1组中的完全匹配:
ALARM\(DC4\).*\(SI\)(.*)(?=\(DC2\))