PHP - Befehle - Reguläre Ausdrücke
1. Einführung
Reguläre Ausdrücke sind so genannte Suchmuster, nach denen man Text durchforsten kann. Dabei gibt es in PHP zwei
"Konzepte", die sich vor allem in der Performance und Komplexität unterscheiden, die ereg- und die
preg-Variante. Da es sich bei diesem Thema meines Erachtens nach um das Komplizierteste handelt, was
die Programmierung zu bieten hat, habe ich darüber ein
Tutorial verfasst. Hier gibt es erst mal
nur einen gaaanz kurzen Überblick.
2. ereg
Das ist die einfachere aber leider auch langsamere Methode.
ereg, eregi
Suchen nach Übereinstimmungen innerhalb einer Zeichenkette. Der Unterschied zwischen beiden Funktionen liegt darin,
dass ereg zwischen Groß- und Kleinschreibung unterscheidet, eregi nicht.
<?php
$datum = '31.6.2006';
/* Überprüft, ob eine Variable das
korrekte deutsche Datumsformat hat */
if (ereg ("([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})",$datum))
{
echo 'Jau, paßt';
}
?>
ereg_replace, eregi_replace
Ersetzt einen Ausdruck durch einen anderen. Der Unterschied liegt wieder in der Groß- und Kleinschreibung, siehe oben.
<?php
// Macht aus einer normalen Mail-Adresse einen Link
$mail = eregi_replace
(
'([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]
([-.]?[0-9a-z])*\\.[a-wyz][a-z]
(fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)',
'<a href="mailto:\\1">'.$text.'<u>\\1</u></a>', $mail
);
?>
Wow, sieht aus, als ob ich mich beim Schreiben zwischendurch auf meiner Tastatur abgestützt habe. Na ja, das ist ein Code-Schnipsel, den ich mir vor Jahren mal irgendwo her besorgt habe, um eine URL zu überprüfen. Selbst ich weiß nicht, was er genau bedeutet.
split
Eigentlich sollte diese Funktion ereg_split heißen, aber wieder mal war man beim Entwicklerteam nicht
sehr sorgfältig, oder schreibfaul. Mit split kann man anhand eines regulären Ausdrucks eine Zeichenkette
aufsplitten. Das Ergebnis wird als Array zurückgegeben.
<?php
$ip = '192.168.0.152';
// zerlegt eine ip in ihre Bestandteile
$seperator = split ("\.",$ip);
print_r($seperator);
?>
Wichtig!
Alle diese Funktionen werden seit PHP 5.3 als "deprecated" eingestuft und verschwinden mit der anstehenden Version 6. Man sollte sie daher eigentlich nicht mehr nutzen!
3. preg
preg steht für Perl Regular E(g)xpressions und stammt,
wie man schon am Namen erkennen kann, aus der Programmiersprache Perl. Sie wurde von einem Linguisten entwickelt und
eignet sich vor allem für eine komfortable Verarbeitung von Zeichenketten. Die preg-Variante ist zwar
deutlich schneller als ereg, aber auch um ein vielfaches komplizierter.
preg_match, preg_match_all
Beide Funktionen suchen nach einem Muster innerhalb einer Zeichenkette. Der Unterschied besteht darin, dass
preg_match_all global sucht, das heißt es werden alle Treffer in ein Array geschrieben. Die Details kommen später beim
geplanten Tutorial.
<?php
// Extrahiert die Domain aus einer URL
preg_match("/^(http:\/\/)?([^\/]+)/i",
"http://www.peterkropff.de/site/php/php.html", $hits);
echo $hits[2];
?>
preg_replace
Durchsucht eine Zeichenkette nach einem Suchmuster und ersetzt dieses durch ein anderes.
<?php
// Entfernt überflüssige Leerzeichen
$string = 'blubb blubber';
$string = preg_replace('/\s\s+/', ' ', $string);
echo $string;
?>
preg_split
Teilt eine Zeichenkette anhand des angegebenen Suchmusters auf. Das Ergebnis wird als Array zurückgegeben.
<?php
// Unterteilt eine Zeichenkette anhand von Leerzeichen
$string = 'hypertext markup language';
$trenn = preg_split('/ /', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($trenn);
?>