regex - schon wieder ;-)

dwex

Erfahrenes Mitglied
Hallo Leute,

ich scheitere schon wieder an wahrscheinlich einfachen Regex.

Ich habe folgenden Code:
PHP:
$grabday = '15.04.2011';
preg_match("/$grabday<\/td><td>([^<])/",$daten,$match);
Damit suche in in einer Tabelle nach einem bestimmten Datum um einen Wert für dieses Datum auszulesen.

Gleich vorweg - das Script funktioniert - habe es gefunden.
Nur ich möchte es auch verstehen - und das tue ich nicht.

Es geht mir im speziellen um den Ausdruck ([^<]+).

Bitte berichtigt mich wenn ich falsch liege von dem was ich schon verstanden habe:
Was die runden Klammern angeht das verstehe ich noch (also was in runden Klammern steht wird separat behandelt und steht im Ergebnis-Array als einzelner Wert.
Das mit den eckigen Klammern verstehe ich, glaube ich, auch - es handelt sich um einenen benutzerdefinierten Suchstring.

Was ich nicht verstehe sind die Zeichen ^ und <.
Das ^ kennzeichnet doch so wie ich es verstanden habe den anfang einer Zeichenkette mit dem + mache ich diese beliebig lang.
Jetzt zum < das ist wohl die beginnende Klammer des Tags </td> - aber warum wird diese in $match[1] nicht mit ausgegeben sondern nur das was davor steht?
Vollkommen verwirrt mich aber, dass nachfolgender Code das gleiche Ergebnis liefert:
PHP:
preg_match("/$grabday<\/td><td>([^<\/td>]+)/",$daten,$match);

Ich hoffe Ihr versteht was ich meine.
 
Zuletzt bearbeitet:
[^<]+

DIe [] Stehen für einen Bereich. zB [abc] steht für ein a, b oder c. das ^ steht für 'nicht'. Also [^a] bedeutet alles ausser a. Das + bedeutet, dass die Klammer ser Klammerinhalt mindestens einmal vorkommen muss.

Ergo bedeutet ([^<]+) Mindestens ein Zeichen das nicht < ist
'text<b>' => die Klammer gibt 'text' aus
 
Verstehe ich das Richtig, dass einfach alle Zeichen ausgegeben werden (egal wieviele) bis das Zeichen < kommt?

Jetzt wirds leichter - vielen dank!
 
Zurück