V. 8.6.1 (27.01.2012)

Infos

Download

Theorie PHP

Schnellsuche

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 &nbsp;&nbsp;&nbsp;&nbsp;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, -1PREG_SPLIT_OFFSET_CAPTURE);
  
print_r($trenn);
?>

weiter zum nächsten Abschnitt