PHP Regular Expression Schnipsel

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 14 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Buch Reguläre Asudrücke
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
  1. 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';
    }
    
  2. 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.';
    }
    
  3. 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.';
    }
    
  4. 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';
    }
    
  5. 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';
    }
    
  6. 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';
    }
    
  7. 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.';
    }
    
  8. Den Domainnamen einer URL ausgeben
    
    $url = "http://example.com/index.htm";
    preg_match( '@^(?:http://)?([^/]+)@i', $url, $matches );
    $host = $matches[1];
    	
    echo $host;
    
  9. 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;
    
  10. 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);
    	}
    }
    
  11. Wiederholende Wörter ersetzen
    $text = preg_replace("/s(w+s)1/i", "$1", $text);
  12. Wiederholende Punkte ersetzen
    $text = preg_replace("/\.+/i", ".", $text);
  13. 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];
    }
    
  14. 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);
    
  15. 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>);
    
  16. 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);
    
  17. Twitter Hashtag #
    
    $content = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\">#\\1</a>", $content);
    

Nützliche Links & Tools

Veröffentlicht am
Kategorisiert in Code, PHP Verschlagwortet mit ,

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.