カンマ区切りの値を任意の順序で正規表現で一致させるにはどうすればよいですか?[複製]

Aug 19 2020

特定のフィールドのコンマ区切り値を含むログ行を扱っています-

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

しかし、これは一致していないようです。私は何かが足りないのですか?ありがとう

回答

PolarBear Aug 19 2020 at 13:27

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'
        };