Am Anfang steht natürlich die Frage, welche Art man beherrschen/erlernen sollte.
POSIX-erweiterte RegEx (ereg_match) oder
Perl-kompatibles/PCRE RegEx (preg_match). Die Frage wird ab PHP5.3 schnell gelöst sein, da POSIX-Funktionen ausgemustert sind. Unabhängig davon, dass man seinen Code ab PHP5.3 nicht updaten will, sollten man vor PHP5.3 auch Perl RegEx benutzen, da POSIX immer den gesamten Code durchsucht, Perl hingegen optional beim ersten Auftauchen des Musters stoppt.
PCRE-Funktionen
preg_match
preg_match führt eine Suche mit einem regulären Ausdruck aus.
Code:
if(preg_match('![a-z0-9\-_\.]+@[a-z0-9\-.]+\.[a-z]{2,4}!i',$source)) die('mindestens eine Email-Adresse gefunden!');
preg_match_all
preg_match_all unterscheidet sich von preg_match nur dahingehend, dass alle Vorkommnisse gesucht und gespeichert werden.
Code:
if($result = preg_match_all('![a-z0-9\-_\.]+@[a-z0-9\-.]+\.[a-z]{2,4}!i',$source,$matches)) die($result.' Email-Adressen gefunden!');
preg-grep
preg_grep durchsucht alle Elemente eines Arrays und gibt die Schlüssel zurück, die auf den regulären Ausdruck passen.
Code:
var_dump(preg_grep('!^[a-c]+$!',$source));
preg_replace
Die wohl bekannteste RegEx-Funktion im PHP-Land. (Wer erinnert sich nicht an seine ersten „BB-Code parsing-Versuche“

)
preg_replace sucht und ersetzt einen Text mit regulären Ausdrücken.
Code:
echo 'Diebstahl!!! '.preg_replace('!peter hat ([0-9]+) eier!is','Hans hat $1 Eier',$source);
preg_replace_callback
preg_replace_callback ist die sichere Variante ein Muster im Text zu suchen und mit einer Funktion zu ersetzen. (Wenn man nicht ordentlich „Slashes escaped“ kann preg_repalce mit dem
eval-Modifikator ein Sicherheitsleck darstellen)
Code:
echo 'Vervielfachung!!! '.preg_replace_callback('!peter hat ([0-9]+) eier!is',create_function('$current','return \'peter hat \'.($current[1]*5).\' eier\';'),$source);
preg_filter (Ab PHP 5.3)
preg_filter unterscheidet sich von preg_replace nur dahingehend, dass sie anstatt die modifizierte Zeichenkette/Array (wenn $subject ein Array ist) auszugeben, die Übereinstimmungen zurück gibt.
Code:
var_dump(preg_filter('!peter hat ([0-9]+) eier!is','Hans hat $1 Eier',$source));
preg_quote
preg_quote setzt einen Backslash vor Zeichen, die zur Syntax regulären Ausdrücken gehören.
Code:
echo preg_replace('!'.preg_quote($uname).' hat ([0-9]+) eier!is','Hans hat $1 Eier',$source);
preg_last_error
preg_last_error gibt den Fehlercode der letzten PCRE RegEx-Auswertung aus.
Code:
switch(preg_last_error()) {
case PREG_NO_ERROR:
echo 'Keine Fehler gefunden';
break;
case PREG_BACKTRACK_LIMIT_ERROR:
echo 'Das Backtrack-Limit wurde erreicht';
break;
...
Gruß
Broken Sword