Moin!
Leider erkennt dieser nicht, dass es sich bei obigen String um 2 Projekte handelt und gibt mir als Ergebnis:
$values[1] = "1";
$values[2] = "Config für Projekt 1</PROJECT><PROJECT id="2">Config für Projekt 1";Hat jemand eine Idee wie das geht? Ist wahrscheinlich wieder total einfach, aber ich hab Tomaten vor den Augen.
Reguläre Ausdrücke sind gierig und nehmen soviel, wie sie kriegen können. In deinem String _kann_ man mehrere Projekteinträge finden, aber genausogut findet man auch nur einen einzigen, der etwas krasser ist.
".*" als regulärer Ausdruck findet soviele Zeichen, wie reinpassen. Wenn du also nicht ausschließt, dass das Endtag auch von ".*" erfaßt wird, weil dahinter noch ein weiteres Endtag existiert, dann kriegst du eben das vorhandene Ergebnis.
Lösung: ".*?" nehmen. Das Fragezeichen nimmt die Gierigkeit, es werden dann so wenig Zeichen, wie möglich, gefunden.
Oder nach "[^<]*" suchen lassen - alles, was kein "<" ist, weil < Tags eröffnet und zwischendurch maskiert werden müßte.
Oder du machst gleich richtige XML-Verarbeitung. Denn echtes XML kann man mit regulären Ausdrücken nicht so einfach erfassen.
- Sven Rautenberg
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)