regex如何以任何顺序匹配逗号分隔的值?

问题描述

我正在处理一个日志行,其中包含用于特定字段的逗号分隔值-

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]+)/

但这似乎不匹配。我想念什么吗? 谢谢

解决方法

OP的问题本质上是模糊的,没有期望的结果/输出样本。

以下代码假定用,分隔的字段和用=:分隔的变量/值对

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

while( <DATA> ) {
    chomp;
    my %hash;
    %hash = split "[,=:]";
    say Dumper(\%hash);
}

__DATA__
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

输出

$VAR1 = {
          'xyz_xyztest_27_jun_2019_2' => '4000','a_test_case_id-20190624.1' => '7|431','xyz' => ''
        };

$VAR1 = {
          'xyz' => '','xyz_xyztest_27_jun_2019_2' => '4000','a_test_case_id-20190624.1' => '7|431'
        };