Come posso catturare una sola acquisizione da un'espressione regolare Perl?
Domanda
Esiste un modo più semplice per estrarre solo un elemento da una partita oltre a seguire:
my $date = ($xml_file =~ m/(\d+)-sys_char/)[0];
# or
my $date = $1 if $xml_file =~ /(\d+)-sys_char/;
Esiste un flag per specificare che m non restituisce un array ma solo un valore concatenato di tutte le corrispondenze $ #, quindi posso fare :?
my $date = ($xml_file =~ mSOMEOPT/(\d+)-sys_char/);
rimuovere lo 0 dalla fine?
Soluzione
Desideri:
my ($date) = ($xml_file =~ m/(\d+)-sys_char/);
Questo ti porterà $ 1
in $ date
. Per quanto riguarda la seconda parte della tua domanda, non c'è modo di ottenere tutte le corrispondenze numerate in una singola variabile, ma puoi inserirle tutte in un array come questo:
my @matches = ($xml_file =~ m/(\d+)-sys_char/);
Queste sono in realtà la stessa sintassi: quando il lato sinistro di una corrispondenza come questa è una matrice, viene restituita una matrice contenente tutte le sottomissioni. La prima versione trasforma ($ date)
in un array a un elemento, eliminando il resto delle sotto-partite.
Altri suggerimenti
my ($date) = $xml_file =~ m/(\d+)-sys_char/;
if ( defined $date ) {
}