Henryk Plötz: Problem mit Regulärem Ausdruck

Beitrag lesen

Moin,

$pattern = '/^isbn=(.{2,})&$/';

In $zeile wird eine Datei eingelesen, in der Links in der Form index.php?isbn=3-453-87737-3&sid=hOeea1067381011 vorkommen. Ich möchte nun, dass aus diesen Links alles zwischen "isbn=" und "&" rausgesucht wird. Irgendwie klappt das nicht.

Du hast das Suchmuster am Anfang und am Ende mit Ankern ausgestattet, was dafür sorgt dass es nur auf Strings zutrifft die mit isbn= beginnen und mit & aufhören. Mache also erstmal das ^ und $ weg.

Wenn du das ausserdem auf eine ganze Datei ansetzt wird das so auch nicht gehen: Reguläre Ausdrücke sind per default 'gierig', d.h. sie matchen so viel sie können. Da du den . verwendet hast ist das so eine Art Freifahrtschein: Es wird alles vom ersten isbn= bis zum letzten & in der jeweiligen Zeile gematcht. Du kannst jetzt entweder den Ausdruck auf nongreedy umstellen, oder den Punkt durch [^&] ersetzen, was auf alles ausser dem & matcht. (Du solltest dir dann aber sicher sein dass die ISBN wirklich immer von einem & abgeschlossen wird.)

Ausserdem dürfte die Schleife so wie du sie hast nicht funktionieren, ich bin mir aber auch nicht sicher was sie machen soll. Wenn du einfach alle ISBNs finden willst, ist http://www.php.net/preg_match_all vielleicht dein Freund.

--
Henryk Plötz
Grüße aus Berlin
~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~