¿Cómo hacer coincidir expresiones regulares con valores separados por comas en cualquier orden? [duplicar]

Aug 19 2020

Estoy tratando con una línea de registro que contiene un valor separado por comas para un campo en particular:

xyz=,xyz_xyztest_27_jun_2019_2:4000,a_test_case_id-20190624.1:7|431

El registro de estos valores separados por comas puede ocurrir en cualquier orden . Por ejemplo -

xyz=,a_test_case_id-20190624.1:7|431,xyz_xyztest_27_jun_2019_2:4000

Estoy tratando de escribir una expresión regular en perl para que coincida con estos valores:

=~/^(?=.*xyz=)(?=.*xyz_xyztest_27_jun_2019_2:[\da-f]+)(?=.*a_test_case_id-20190624.1:[\da-f]+\|[\da-f]+)/

Pero esto no parece coincidir. ¿Me estoy perdiendo de algo? Gracias

Respuestas

PolarBear Aug 19 2020 at 13:27

La pregunta de OP es de naturaleza oscura sin una muestra del resultado/salida deseado.

El siguiente código asume que los campos separados por ,y los pares de variable/valor separados por=:

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

Producción

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