2011-01-14 6 views
1

Ich möchte den Inhalt aus einer großen Datei von Tabellenzellen mit regexp extrahieren und die Daten mit PHP verarbeiten.Holen Sie Inhalt in HTML-Tags mit RegExp

Hier ist die Daten, die ich passen mag:

<td>Current Value: </td><td>100.178</td> 

ich diesen regexp versucht, mit dem Text anzupassen und abrufen:

preg_match("<td>Current Value: </td><td>(.+?)</td>", $data, $output); 

aber ich erhalte eine „Unbekannter Modifikator“ Warnung und meine Die Variable $ output wird leer ausgegeben.

Wie kann ich das erreichen - und können Sie mir eine kurze Zusammenfassung der Funktionsweise der Lösung geben, damit ich versuchen kann zu verstehen, warum mein Code nicht funktioniert hat?

Antwort

2

Sie benötigen Begrenzer um Ihre regex hinzuzufügen:

preg_match("#<td>Current Value: </td><td>(.+?)</td>#", $data, $output); 

Das Standardtrennzeichen ist /, aber Sie können andere nicht-alphanumerische Zeichen verwenden, wenn Sie wollen (was Sinn hier macht, weil die Regex selbst Schrägstriche enthält) . In Ihrem Fall dachte die Regex-Engine, dass Sie spitze Klammern als Trennzeichen verwenden wollten - und fehlgeschlagen.

Noch ein Tipp (abgesehen von der kanonischen Ermahnung "Du sollst HTML nicht mit Regexen analysieren") (was ich in einem bestimmten Fall vollkommen OK finde)): Benutze ([^<>]+) anstelle von (.*?). Auf diese Weise wird sichergestellt, dass Ihre Regex niemals über verschachtelte Tags transportiert wird, eine häufige Fehlerquelle im Umgang mit Markup-Sprachen.

+0

Das funktionierte. Wann sind Trennzeichen notwendig? Können sie irgendwelche Charaktere sein? – MarathonStudios

+0

Sie sind immer notwendig (in PHP), und sie können jedes nicht-alphanumerische Zeichen sein. –

1

Ich würde vorschlagen, Sie verwenden einen DOM-Parser. Es wird Ihr Leben viel einfacher machen, Ihren Code sauberer halten und einfacher zu pflegen sein.

http://simplehtmldom.sourceforge.net/

Dies hat einige Beispiele für Kind-Elemente zuzugreifen: http://simplehtmldom.sourceforge.net/manual.htm#section_traverse

+0

Das ist etwas über dem, was ich für dieses spezielle Projekt brauche, aber das sieht nach einer schönen Bibliothek aus. Ich bin sicher, ich werde es in Zukunft verwenden! – MarathonStudios

+0

@Marathon ist es nicht. In der Tat ist es ein Stück Mist (sorry @jmort, es ist wirklich. Nichts persönliches). Siehe http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662 für bessere Alternativen. – Gordon

+0

@Gordon - LOL keine Sorgen. String Parsing ist auch nicht viel besser. Ich wusste nicht, dass SimpleXML genau darum geht. Wie widerlich. – jmort253

Verwandte Themen