Pergunta

Eu gostaria de pegar todas as tags "dev" e seus respectivos conteúdos, através preg_match_all() php, mas não pode obter os aninhados.

dados:

<dev>aaa</dev> <dev>bbb</dev> <dev> ccc <dev>ddd</dev> </dev>

minha expressão até agora:

|<dev>(.*)</dev>|Uis

graças, por sua ajuda, b.

Foi útil?

Solução

Não use expressões regulares para análise. Use um analisador real como DOMDocument ou SimpleXML :

$xml = simplexml_load_string('<root>'.$str.'</root>');

Outras dicas

Você precisa ter um padrão de correspondência recursiva:

/<dev>(.*|(?R))<\/dev>/i

Isso só vai sugar quaisquer elementos aninhados, por isso, se você quiser, em seguida, analisar os, você terá que executar a função novamente em $ matches [1]

O * é um operador ganancioso, consome tantos caracteres quanto possível. Você deve usar a versão *? não-gananciosos, em vez de encontrar as menores possíveis correspondências. Talvez expressões regulares não são as melhores ferramentas para fazer isso.

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