Zeichenfolgen/-mengen per Regular Expressions ausschließen

Nicht immer wird bei String-Validierungen ein Ausdruck erstellt, der nur die erlaubten Muster und Zeichen enthält. Auch anders herum ist es möglich – bestimmte Zeichenketten (?!) oder Zeichen(^) explizit ausschließen.

Zeichenfolge in einem Muster ausschließen:
.*(?!DiesesAusschliessen).*

Zeichenmenge in einem Muster ausschließen:
[^a-z0-9]

Eine Gruppierung die nicht in das Ergebnis einer Regular Expression einbezogen/selektiert werden soll, aber als Gruppierung geklammert werden muss, kann entsprechend (?:) gekennzeichnet werden:
.*(?:GruppeNichtSelekieren).*

Montag und Sonntag einer Kalenderwoche

Den Montag und den Sonntag einer gegebenen Kalenderwoche kann mit PHP (ab Version 5) einfach wie folgt ermittelt werden:

<?php
$tsMonday = strtotime(date('Y') . 'W' . date('W') . '1'));
$tsSunday = strtotime(date('Y') . 'W' . date('W') . '7'));
?>

Dabei wird ein Datumsstring in der Form ‚2008W411‘ an strtotime() übergeben, also Jahr 2008, KW 41, Tag 1 (Montag).

Andere Tage einer KW können durch anpassen des Tages (1-7) errechnet werden.

Gierigkeit bei Regular Expressions

Mit einem Reguläre Ausdruck (Regular Expression) wir ein Suchmuster für eine (oder mehrere) Teilzeichenketten innerhalb einer Zeichenmenge beschrieben. Reguläre ausdrücke können z. B. eingesetz werden um eine E-Mail-Adresse oder andere Formularfelder auf eine gültige Syntax (wurden nur erlaubte Zeichen eingegeben) zu prüfen.

Gierigkeit
Im Normalfall verhält sich ein Regulärer Ausdruck immer „gierig“, d. h. er umfasst die größtmögliche Anzahl von Zeichen, die dem Suchmuster entsprechen. Sofern dies nicht gewünscht ist, kann ein Suchmuster als „genügsam“ deklariert werden.

Beispiel: In einer Zeichenkette sind Platzhalter definiert, die über einen Regulären Ausdruck gefunden werden sollen, hier das Datumsformat ‚d.m.Y‘: Heute ist der {d:d.m.Y}, hallo {name}.

Der Reguläre Ausdruck ‚/{d:(.*)}/‘ würde nun im gierigen Verhalten die Teilzeichenkette ‚d.m.Y}, hallo {name‘ extrahieren. Um die für dieses Bespiel gewünschte Teilzeichenkette ‚d.m.Y‘ zu extrahieren muss der Ausdruck genügsam sein. Dies wird durch den „non-greedy“-Quantor „*?“ erreicht: ‚/{d:(.*?)}/‘.

Im PHP könnte der Aufruf dann wie folgt aussehen:
preg_match(‚/{d:(.*?)}/‘, ‚Heute ist der {d:d.m.Y}, hallo {name}‘, $matches);

Umfassende Informationen zu Regulären Ausdrücken: