Die Nutzung von Regular Expressions, reguläre Ausdrucke, sind nicht leicht verständlich und doch in der Entwicklung notwendig und nützlich. Mir persönlich liegen die abstraketen Formulierungen nicht sonderlich und so habe ich immer diverse Schnipsel der Regex gesammelt.
Einige davon lege ich nun online ab, weil ich denke, dass sie recht nützlich sind und eine einfache Nutzung ermöglichen.
Zusätzlich habe ich einige Links gelistet, die in diesem Umfeld sehr nützlich sein können, besonders gefällt mir das Desktop-Tool für Windows RegexMagic.
Zum Einstieg einige Grundregeln, bevor es in die Beispiele geht. Gern können zusätzliche Schnipsel oder Korrekturen, Verbesserungen in den Kommentaren hinterlegt werden.
Diverse Regular Expression Syntax
Regular Expression | Bedeutung |
---|---|
foo |
Der String „foo“ |
^foo |
„foo“ Am Anfang des String |
foo$ |
„foo“ Am Ende des String |
^foo$ |
„foo“ Alleinstehender String |
[abc] |
a, b, oder c; irgendein String der Liste |
[a-z] |
Irgendein kleingeschriebender Buchstabe |
[^A-Z] |
Irgendein Zeichen, welches kein Großbuchstabe ist |
(gif|jpg) |
Erkenne „gif“ oder „jpeg“ |
[a-z]+ |
Ein oder mehrere kleingeschriebene Buchstaben |
[0-9.-] |
Eine Zahl, ein Punkt oder ein Minus |
^[a-zA-Z0-9_]{1,}$ |
Irgendein Wort, von mindestens einem Buchstaben, einer Zahl oder Underline _ |
([fb])([wp]) |
fw, fp, bw oder bp |
[^A-Za-z0-9] |
Ein Symbol (keine zahl oder Buchstabe) |
([A-Z]{3}|[0-9]{4}) |
Erkenne drei Buchstaben oder vier Zahlen |
PHP Funktionen
Funktion | Bedeutung |
---|---|
preg_grep() |
Liefert Array-Elemente, die auf ein Suchmuster passen |
preg_match_all() |
Führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch |
preg_match() |
Führt eine Suche mit einem regulären Ausdruck durch |
preg_quote() |
Maskiert Zeichen regulärer Ausdrücke |
preg_replace_callback() |
Sucht und ersetzt einen regulären Ausdruck unter Verwendung eines Callbacks |
preg_replace |
Sucht und ersetzt einen regulären Ausdruck |
preg_split() |
Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks |
preg_filter() |
Suchen und ersetzen mit einem regulären Ausdruck; ab PHP 5.3.0 |
- E-Mail Adresse prüfen
$email = "test@example.com"; if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $email)) { echo 'Die E-Mail ist OK.'; } else { echo 'Falsches E-Mail-Format'; }
Besser geht es ab PHP 5.2.0 mit der Funktion
filter_var()
, wobei man spezifische Filter angeben kann.if ( filter_var('test+email@example.com', FILTER_VALIDATE_EMAIL) ) { echo 'Die E-Mail ist OK.'; } else { echo 'Falsches E-Mail-Format'; }
- Usernamen prüfen
$username = 'example_user_name_123'; if ( preg_match('/^[a-z\d_]{5,20}$/i', $username) ) { echo 'Username ist OK.'; } else { echo 'Username-Format ist nicht OK.'; }
- Telefonnummer prüfen
$phone = '(021)423-2323'; // US Format if ( preg_match('/\(?\d{3}\)?[-\s.]?\d{3}[-\s.]\d{4}/x', $phone) ) { echo 'Telefonnummer ist OK.'; } else { echo 'Telefonnummer ist nicht OK.'; } $phone = '+49 (00000) 00000'; // DE Format if ( eregi("^[ +0-9/()]+$", $phone) ) { echo 'Telefonnummer ist OK.'; } else { echo 'Telefonnummer ist nicht OK.'; } $phone = '+49 (00000) 00000'; // DE Format if ( preg_match('#[^0-9\+\-\040/]#', $phone) ) { echo 'Telefonnummer ist nicht OK.'; } else { echo 'Telefonnummer ist OK.'; }
- IP Addresse prüfen
$IP = '198.168.1.78'; if ( preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $IP) ) { echo 'IP ist OK'; } else { echo 'IP ist nicht OK'; }
- Postleitzahl prüfen
$zipcode = '12345-5434'; // US Code if ( preg_match("/^([0-9]{5})(-[0-9]{4})?$/i", $zipcode) ) { echo 'PLZ ist OK'; } else { echo 'PLZ ist nicht OK'; } $zipcode = '99817'; // DE Code if ( preg_match('/[0-9]{5}$/', $zipcode) ) { echo 'PLZ ist OK'; } else { echo 'PLZ ist nicht OK'; }
- Kreditkartenummer validieren
$ccnr = "378282246310005"; if ( preg_match('/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})$/', $ccnr) ) { echo 'Nummer ist OK'; } else { echo 'Nummer ist nicht OK'; }
- Domains prüfen
$url = "http://example.com/"; if (preg_match('/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i', $url)) { echo 'Deine URL ist OK.'; } else { echo 'Falsche URL.'; }
- Den Domainnamen einer URL ausgeben
$url = "http://example.com/index.htm"; preg_match( '@^(?:http://)?([^/]+)@i', $url, $matches ); $host = $matches[1]; echo $host;
- Hervorheben eines Wortes im Text
$text = "Ein Bespieltext für reguläre Ausdrücke, kurz regex. Um regex zu lernen, muss man sich oft regexen und higlighten geht auch in Pluralformen wie regexs oder dem regexen."; $text = preg_replace( "/\b(regex)\b/i", '<span style="background: yellow">\1</span>', $text ); echo $text;
- Bilder finden
$images = array(); preg_match_all('/(img|src)=("|')[^"'>]+/i', $data, $media); unset($data); $data = preg_replace( '/(img|src)("|'|="|=')(.*)/i', "$3", $media[0] ); foreach($data as $url) { $info = pathinfo($url); if ( isset( $info['extension'] ) ) { if ( ($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png') ) array_push($images, $url); } }
- Wiederholende Wörter ersetzen
$text = preg_replace("/s(w+s)1/i", "$1", $text);
- Wiederholende Punkte ersetzen
$text = preg_replace("/\.+/i", ".", $text);
- xHTML/XML Tag finden
function get_tag( $tag, $xml ) { $tag = preg_quote($tag); preg_match_all( '{<' . $tag . '[^>]*>(.*?)</' . $tag . '>.}', $xml, $matches, PREG_PATTERN_ORDER ); return $matches[1]; }
- Seiten Titel finden
$fp = fopen("http://www.example.com/", "r"); $page = ''; while ( !feof($fp) ) { $page .= fgets($fp, 4096); } $title = eregi("<title>(.*)</title>", $page, $regs); echo $regs[1]; fclose($fp);
- Twitter Process Name
$content = preg_replace("~@(\w+)~", "<a href=\"http://twitter.com/\\1\" class=\"twitter-user\">@\\1</a>", $content); $content = preg_replace("~^(\w+):~", "<a href=\"http://twitter.com/\\1\" class=\"twitter-user\">@\\1</a>);
- Twitter Tweet Links
$content = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\">\\2</a>", $content); $content = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\">\\2</a>", $content);
- Twitter Hashtag #
$content = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\">#\\1</a>", $content);