sintaxe de expressão regular em PHP para extrair todas as instâncias de um formato

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

  •  10-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando extrair todas as instâncias de um determinado formato de uma string:

Eu estou querendo saber se o meu novo Sony [PT # 123456ABC; Sony] tem esse recurso, mas meu amigo diz que o novo Toshiba [PT # AD-3232hjk; Toshiba] tem esse recurso.

Gostaria de extrair:

[PT # 123456ABC; Sony]

[PT # AD-3232hjk; Toshiba]

Como você pode ver aqui, os únicos itens nas posições consistentes são:

  • [PT #
  • ;
  • ]

Eu estava tentando usar vários tipos de strpos (), mas por causa das diferentes comprimentos e formatos dos números de peça e nomes de fabricantes que eu era incapaz de puxar de forma confiável a essas instâncias de uma cadeia muito maior. Eu tenho tentado várias maneiras de usar expressões regulares para resolver este no entanto o meu conhecimento com eles é bastante limitada. Depois de eu ter estas expressões extraídos e colocados em variáveis ??I seguida, terá de separar os números de peça e nomes de fabricantes da expressão. Isso também pode ser mais fácil de realizar usando expressões regulares.

Qualquer ajuda é apreciada. Graças

Foi útil?

Solução

Eu acho que isso iria fazê-lo

preg_match_all( "/(\[PT#\s+.*?;\s+.*?\])/", $input, $matches );

print_r( $matches );

Altternatively, se você só queria capturar a informação única

preg_match_all( "/\[PT#\s+(.*?);\s+(.*?)\]/", $input, $matches );

Outras dicas

$matches = array();
preg_match_all( "/\[PT#([^\];]+);([^\]]+)\]/", $input, $matches,  PREG_SET_ORDER);

foreach ($matches as $match) {
  echo "id=", trim($match[1]), " brand=", trim($match[2]), "\n";
}

Acho que você vai estar lendo a partir de um arquivo de texto contendo uma grande quantidade de essas entradas. O que você pode fazer é:

preg_match_all("/\[PT#(.*?);[.*]?(.*?)\]/i", $text, $result);

ele vai colocar todas as partidas para a matriz $ result e você pode acessá-los assim:

echo $result[1][0]; //echos first occurrence's serial

$ result é coluna classificada grande ea primeira entrada em um jogo é a seqüência de jogo completa

echo $result[0][0]; // would print [PT# 123456ABC; Sony]
echo $result[1][0]; // would print 123456ABC
echo $result[2][0]; // would print Sony

Espero que ajude

EDIT: fixo a regex, deve funcionar agora (ainda não testado)

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