Der Martin: RegEX nicht erklärbar

Beitrag lesen

Hi,

Ich versuche mit folgender Anweisung einen TEXT zu matchen. Der Unterschied zwischen ersten und zweiten TExt ist nur das letzte Wort "Eiche". Wenn ich das Wort großschreibe, findet er den Text NICHT und wenn ich es kleinschreibe, findet er den Text. Das ist doch nicht erklärbar - oder?

preg_match_all("/\[TEXT([0-9]*)\]([^\[\/TEXT\]]*)\[\/TEXT\]/s", $beschreibung, $match_text);

doch, eigentlich schon. Es liegt daran, dass du im mittleren Teil deines RegEx eine Zeichenklasse notiert hast. Du willst also zwischen deinen Begrenzern alles finden, was

  • keine öffnende oder schließende eckige Klammer
  • kein Slash
  • und keiner der Großbuchstaben T, E oder X ist (das T steht sogar doppelt drin).

Im Wort "Eiche" steht aber ein großes E, das nach deiner Regel nicht vorkommen darf, also endet der gefundene Teil vor dem E. Danach folgt aber nicht der String [/TEXT], also passt das Suchmuster nicht auf den gesamten Text.
Denselben Effekt hättest du, wenn zufällig ein anderes Wort vorkäme, das mit T, E oder X beginnt.

So long,
 Martin