【发布时间】:2020-12-08 08:36:20
【问题描述】:
我正在处理一个日志行,其中包含特定字段的逗号分隔值 -
xyz=,xyz_xyztest_27_jun_2019_2:4000,a_test_case_id-20190624.1:7|431
这些逗号分隔值的记录可能以任何顺序发生。比如——
xyz=,a_test_case_id-20190624.1:7|431,xyz_xyztest_27_jun_2019_2:4000
我正在尝试在 perl 中编写一个正则表达式来匹配这些值 -
=~/^(?=.*xyz=)(?=.*xyz_xyztest_27_jun_2019_2:[\da-f]+)(?=.*a_test_case_id-20190624.1:[\da-f]+\|[\da-f]+)/
但这似乎不匹配。我错过了什么吗? 谢谢
【问题讨论】:
-
您的模式仅包含 Lookaheads,这意味着它将仅匹配其他所有内容之后的空字符串(AKA,断言位置)。将要捕获的部分放入捕获组:
^(?=.*(xyz=))(?=.*(xyz_xyztest_27_jun_2019_2:[\da-f]+))(?=.*(a_test_case_id-20190624\.1:[\da-f]+\|[\da-f]+))。演示:regex101.com/r/6OGEa0/1 -
您已经提供了输入,您期望处理输入数据的效果是什么?
-
尝试 2 个捕获组
\G([^\s,=]+)[=:]([^\s,=]*)(?:,|$)regex101.com/r/2zQpBn/1
标签: regex perl regex-lookarounds