어떤 순서로든 쉼표로 구분 된 값을 정규식으로 일치시키는 방법은 무엇입니까? [복제]

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

이 값과 일치하도록 펄에서 정규식을 작성하려고합니다.

=~/^(?=.*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'
        };