Pergunta

Aqui está o padrão que desejo corresponder:

<div class="class">
<a href="http://www.example.com/something"> I want to be able to capture this text</a>
<span class="ptBrand">

Isso é o que estou fazendo:

$pattern='{<div class="productTitle">[\n]<((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)>([^\n]*)</a>[\n]<span class="ptBrand">}';

preg_match($pattern, $data, $matches,PREG_OFFSET_CAPTURE);

print_r($matches);

Ele imprime:

Variedade ( )

Foi útil?

Solução

Como regra geral, expressões regulares são um meio muito ruim de analisar HTML.Eles não são confiáveis ​​e tendem a acabar sendo muito complicados.Uma solução muito mais robusta é usar um analisador HTML.Ver Analise HTML com PHP e DOM.

Quanto à sua expressão, não vejo <div class="productTitle" em qualquer lugar da fonte, então eu começaria por aí.Da mesma forma, você está tentando analisar um URL, mas não há menção à tag âncora (diretamente ou por meio de um curinga suficiente), portanto, também falhará.Basicamente, essa expressão não se parece em nada com o HTML que você está tentando analisar.

Outras dicas

... Ou isto:

preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);

Apara também.

O padrão:

/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m

Obteria o link e o texto aproximadamente, mas o uso da biblioteca DOM seria um método muito melhor.

Você pode tentar isso:

<a href=".*?">([\s\S]*?)</a>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top