Como faço para pegar apenas uma captura de fora de uma expressão regular Perl?
Pergunta
Existe uma maneira mais fácil de agarrar apenas um elemento de um jogo diferente de fazer o followng:
my $date = ($xml_file =~ m/(\d+)-sys_char/)[0];
# or
my $date = $1 if $xml_file =~ /(\d+)-sys_char/;
Existe um sinalizador para especificar que m não retorna uma matriz, mas apenas um valor concatenado de todas as partidas $ #, então eu posso fazer:?
my $date = ($xml_file =~ mSOMEOPT/(\d+)-sys_char/);
remover o 0 do final?
Solução
Você quer:
my ($date) = ($xml_file =~ m/(\d+)-sys_char/);
Isto fará você $1
em $date
. Quanto à segunda parte da sua pergunta, não há nenhuma maneira de obter todos os jogos numerados em uma única variável, mas você pode obtê-los todos em uma matriz como este:
my @matches = ($xml_file =~ m/(\d+)-sys_char/);
Estes são realmente a mesma sintaxe: quando o lado esquerdo de um jogo como este é um array, então um array contendo todos os submatches é retornado. A primeira versão make ($date)
em uma matriz de um elemento, jogando fora o resto das sub-partidas.
Outras dicas
my ($date) = $xml_file =~ m/(\d+)-sys_char/;
if ( defined $date ) {
}