Comment faire correspondre les regex aux valeurs séparées par des virgules dans n'importe quel ordre ? [dupliquer]
Aug 19 2020
J'ai affaire à une ligne de journal qui contient une valeur séparée par des virgules pour un champ particulier -
xyz=,xyz_xyztest_27_jun_2019_2:4000,a_test_case_id-20190624.1:7|431
L'enregistrement de ces valeurs séparées par des virgules peut se produire dans n'importe quel ordre . Par exemple -
xyz=,a_test_case_id-20190624.1:7|431,xyz_xyztest_27_jun_2019_2:4000
J'essaie d'écrire une expression régulière en perl pour correspondre à ces valeurs -
=~/^(?=.*xyz=)(?=.*xyz_xyztest_27_jun_2019_2:[\da-f]+)(?=.*a_test_case_id-20190624.1:[\da-f]+\|[\da-f]+)/
Mais cela ne semble pas correspondre. Est-ce que je manque quelque chose? Merci
Réponses
PolarBear Aug 19 2020 at 13:27
La question d'OP est de nature obscure sans échantillon de résultat / sortie souhaité.
Le code suivant suppose que les champs sont séparés par ,
et que les paires variable/valeur sont séparées par=:
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
Production
$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'
};