Como faço para pegar apenas uma captura de fora de uma expressão regular Perl?

StackOverflow https://stackoverflow.com/questions/1822729

  •  10-07-2019
  •  | 
  •  

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?

Foi útil?

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 ) {

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top