Bagaimana cara mencocokkan ekspresi reguler dengan nilai yang dipisahkan koma dalam urutan apa pun? [duplikat]
Aug 19 2020
Saya berurusan dengan baris log yang berisi nilai yang dipisahkan koma untuk bidang tertentu -
xyz=,xyz_xyztest_27_jun_2019_2:4000,a_test_case_id-20190624.1:7|431
Pencatatan nilai yang dipisahkan koma ini dapat terjadi dalam urutan apa pun . Sebagai contoh -
xyz=,a_test_case_id-20190624.1:7|431,xyz_xyztest_27_jun_2019_2:4000
Saya mencoba menulis regex dalam perl untuk mencocokkan nilai-nilai ini -
=~/^(?=.*xyz=)(?=.*xyz_xyztest_27_jun_2019_2:[\da-f]+)(?=.*a_test_case_id-20190624.1:[\da-f]+\|[\da-f]+)/
Tapi ini sepertinya tidak cocok. Apakah saya melewatkan sesuatu? Terima kasih
Jawaban
PolarBear Aug 19 2020 at 13:27
Pertanyaan OP tidak jelas tanpa sampel hasil / keluaran yang diinginkan.
Kode berikut mengasumsikan bahwa bidang dipisahkan dengan ,
dan pasangan variabel / nilai dipisahkan dengan=:
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
Keluaran
$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'
};
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'