sintaxe de expressão regular em PHP para extrair todas as instâncias de um formato
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
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 ??p>
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)