Mit Regular Expression's Formularfelder parsen
kaepten
- php
Hallo Self-Freunde
Ich möchte eine HTML Seite parsen und die darin enthaltenen Formularfelder finden und in ein Array ablegen.
Mit ereg und einem Muster habe ich schon Teilerfolge (ich getrau mich aber nicht es zu posten... vermutlich ist es ein riesen Hack). Da ich aber davon ausgehe, dass mein Problem schon 10000000 Fach gelöst wurde, frage ich Euch ob mir jemand ein "korrektes" Muster angeben kann um z.B. ein INPUT Form-Feld im Wirrwarr anderer HTML Tags zu erfassen.
Ein weiteres kleines Problem habe ich noch damit, wenn zwei Formfelder auf einer Zeile stehen. Wie kann ich beide Felder finden und in abhängigkeit des "NAME" ein "VALUE" setzen? Also wenn ich nicht nur finden, sondern ersetzen möchte?
Vielen Dank für Hinweise und Tipps
kaepten
Sofern du immer <input ... name="..." ... value="..." ... /> und nicht gemischt mit <input ... value="..." ... name="..." ... /> arbeitest kannst Du diesen hier nehmen:
/<input.*?name="(.*?)".*?value="(.*?)".*?>/i
anderfalls häng den anderen Fall eben noch mit dran:
/<input.*?name="(.*?)".*?value="(.*?)".*?>|<input.*?value="(.*?)".*?name="(.*?)".*?>/i
Das Ganze ist nicht case-sensitive!
Wenn Du das durch einen preg_match_all laufen lässt erhälst Du die Treffer als Array:
preg_match_all($regex, $out, PREG_SET_ORDER);
for($i=0; $i<count($out); $i++) {
$name = $out[$i][0];
$value = $out[$i][1];
// Anweisungen...
}
Hoffe es klappt, ist nicht getestet...
Gruss Stefan
Hallo Stefan
Die Reihenfolge kann gemischt sein, deshalb muss ich die zweite Lösung berücksichtigen.
Mit dem preg_match_all bin ich gerade am expiremtieren. Scheint der Weg zu meiner Lösung zu sein.
Vielen Dank für die ausführliche Antwort!
kaepten