Frage

Hier ist das Muster, das ich übereinstimmen möchte:

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

Das mache ich:

$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);

Es druckt:

Array ()

War es hilfreich?

Lösung

In der Regel sind regelmäßige Ausdrücke ein wirklich schlechtes Mittel zum Parsen von HTML. Sie sind unzuverlässig und sind in der Regel wirklich kompliziert. Eine weitaus robustere Lösung besteht darin, einen HTML -Parser zu verwenden. Sehen HTML mit PHP und DOM analysieren.

Was Ihren Ausdruck betrifft, sehe ich nicht <div class="productTitle" Überall in der Quelle würde ich dort anfangen. Ebenso versuchen Sie, eine URL zu analysieren, aber es gibt keine Erwähnung des Anker -Tags (entweder direkt oder durch eine ausreichende Wildkarte), so dass es auch dort scheitert. Grundsätzlich sieht dieser Ausdruck nicht so aus wie das HTML, das Sie analysieren möchten.

Andere Tipps

... Oder dieses:

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

Müll es auch.

Das Muster:

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

Würde den Link und den Text grob erhalten, aber die Verwendung der DOM -Bibliothek wäre eine viel bessere Methode.

Sie können dies versuchen:

<a href=".*?">([\s\S]*?)</a>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top