Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Reguläre Ausdrücke
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  

 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 79.000 Beiträgen finden Sie sicher die passende Antwort!  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 



 

Einsatz der Funktionen im POSIX-Stil




Die regulären Funktionen im POSIX-Stil gehören seit PHP 3 zum Funktionsumfang. Da die PCRE-Funktionen erst später eingeführt wurden und lange Zeit nicht zur Standardinstallation gehörten, waren die POSIX-Funktionen oft die einzige Möglichkeit, reguläre Ausdrücke auszuführen.

Mittlerweile haben Sie jedoch die Wahl zwischen PCRE- oder POSIX-Funktionen. Grundsätzlich gilt, dass PCRE-Funktionen zu bevorzugen sind, da diese wesentlich schneller, flexibler und leistungsfähiger sind als die POSIX-Funktionen. Die meisten Suchmuster können Sie auch auf die POSIX-Funktionen übertragen. Die Verwendung komplexer Muster, wie z.B. die Filterung von Verweisen, ist jedoch nur schwer umsetzbar. Beachten Sie, dass die POSIX-Funktionen die Verkürzungen mittels Backslash nicht unterstützen, und das die Funktionen nicht binary-safe sind.


Erweiterte Syntax

In der erweiterten Syntax werden Ersatzsymbole unterstützt, welche den Umgang mit regulären Ausdrücken vereinfachen.


Beispiel



<?php
// Zeichenkette
$text "Hallo Welt";
ereg("[[:alnum:]]*"$text$matches);
print_r($matches);
?>




Ausgabe



Array
(
    [0] => Hallo
)



So können Sie auf einfache Weise den String nach alphanumerischen Zeichen durchsuchen. Die Zeichenfolge [:alnum:] steht für alphanumerische Zeichen. Dieser Ausdruck ist äquivalent zur Zeichenklasse [a-zA-Z0-9]. Beachten Sie, dass ein Ersatzsymbol in eckigen Klammern und Doppelpunkten eingeschlossen werden muss. Hinzu kommen die eckigen Klammern der Zeichenklasse. Würden Sie im Beispiel statt [[:alnum:]] nur [:alnum:] verwenden, so wird der Ausdruck innerhalb der Zeichenklasse als eine Liste von Zeichen interpretiert und der Text nach den Zeichen :,a,l,n,u,m durchsucht.

Hier nun eine Auflistung der zur Verfügung stehenden Ersatzsymbole.

Symbol Entsprechung Bedeutung
[:digit:] [0-9] Ziffern
[:alpha:] [a-zA-Z] Buchstaben
[:alnum:] [a-zA-Z0-9] Alphanumerische Zeichen
[:blank:] [\t ] Leerzeichen, Tabulatoren
[:space:] [\s] Freiraum
[:punct:] [[]!\"#$%&'()*+,./:;<=>?@\^_´{|}~[-]*] Satzzeichen
[:lower:] [a-z] Kleinbuchstaben
[:upper:] [A-Z] Grossbuchstaben
[:cntrl:] Steuerzeichen
[:graph:] [[:alpha:][:digit:][:punct:]] Schriftzeichen
[:print:] [[:graph:]] Druckbares Zeichen
[:xdigit:] [0-9a-fA-F] Hexadezimal Zeichen



Einsatz von ereg() und eregi()

Im Gegensatz zu den PCRE-Funktionen erhalten POSIX-Funktionen keinen Delimiter. Das bedeutet, Sie können an diese Funktionen keinen Modifizierer übergeben. Damit jedoch eine Ausschaltung der Gross- und Kleinschreibung möglich ist, gibt es neben der ereg()-Funktion die eregi()-Funktion, die keine Unterscheidung zwischen Gross- und Kleinschreibung vornimmt. Die beiden Funktionen eignen sich hervorragend zum durchsuchen von Zeichenketten.


Beispiel



<pre>
<?php
// Zeichenkette
$text "13358";
echo 
ereg("^[0-9]{5}$"$text$matches);
print_r($matches);
?>
</pre>




Ausgabe



5
Array
(
    [0] => 13358
)



Im Beispiel wird eine Zeichenkette daraufhin geprüft, ob diese aus genau 5 Ziffern besteht, folgender Ausdruck [[:digit:]]{5}$ würde zum selben Ergebnis führen. Eine solche Überprüfung eignet sich vor allem bei der Verifikation von Postleitzahlen. Die ereg()-Funktion speichert die Anzahl der gefunden Zeichen in dem optionalen Parameter matches. Diese Arbeitsweise entspricht der preg_match()-Funktion. Sollte keine Übereinstimmung gefunden werden, so wird FALSE zurückgegeben.


Einsatz von ereg_replace und eregi_replace()
Mit Hilfe der beiden Funktionen ereg_replace() oder eregi_replace() sind Sie in der Lage Zeichenketten zu ersetzen. Im Gegensatz zu preg_replace() lassen sich lediglich Strings und keine Arrays verarbeiten. Auch bei diesem Funktionspaar unterscheidet die eregi_replace()-Funktion nicht zwischen Gross- und Kleinschreibung. Beide Funktionen unterstützen Rückverweise.


Beispiel



<?php
// Zeichenkette
$htmltext "Verweis: [url=www.atomicscript.de]";

// Suchmuster
$reg_muster "\[url=([^]]*)\]";

// Austausch
$tausch '<a href=""></a>';

echo 
eregi_replace($reg_muster$tausch$htmltext);
?>




Ausgabe



<a href="www.atomicscript.de">www.atomicscript.de</a>




Besonderheit

Verwenden Sie als Ersatzstring eine Zahl vom Typ Integer, so müssen Sie diese Zahl explizit in einen String umwandeln ansonsten kommt es zu unerwarteten Ergebnissen, da die Zahl als Ordinalwert betrachtet wird.


Beispiel



<?php
// Zeichenkette
$htmltext "Inhalt";

// Suchmuster
$reg_muster "[a-z]{6}";

// Austausch
$tausch 90;

// Ausgabe - Z
echo eregi_replace($reg_muster$tausch$htmltext);

// Ausgabe - 90
echo eregi_replace($reg_muster, (string) $tausch$htmltext);
?>



Die Zahl 90 ist der Ordinalwert des Zeichens Z. Da dieser Wert als Zahl in die Funktion eregi_replace() einging, wird der Zahlenwert durch das Zeichen der ASCII-Codetabelle ersetzt. Die explizite Umwandlung mit (string) bewirkt, dass sich die Funktion wie erwartet verhält.

Hinweis: Für einfache Ersetzungen können Sie auch die Funktion str_replace() verwenden. Diese ersetzt eine Zeichenkette durch eine andere und arbeitet um einiges schneller, als die Ersetzungen mittels regulärer Ausdrücke.



Einsatz von split() und spliti()
Mit Hilfe der beiden Funktionen split() und spliti() lassen sich Zeichenketten zerlegen. Die Rückgabewerte dieser Funktionen ist ein Arraym dessen Elemente die Teilstrings beinhalten. Auch bei diesem Funktionspaar unterscheidet die spliti()-Funktion nicht zwischen Gross- und Kleinschreibung.


Beispiel



<pre>
<?php
// Zeichenkette
$text "Eintrag1;Eintrag2:Eintrag3,Eintrag4;Eintrag5";

// Suchmuster
$reg_muster ";|:|,";

print_r(split($reg_muster,$text));
?>
</pre>




Ausgabe



Array
(
    [0] => Eintrag1
    [1] => Eintrag2
    [2] => Eintrag3
    [3] => Eintrag4
    [4] => Eintrag5
)



Es werden immer n+1 Elemente zurückgegeben. Dies bedeutet, findet der Ausdruck wie im Beispiel vier Trennzeichen, so entstehen daraus 5 Array-Elemente. Folgt nach dem letzten Trennzeichen nichts mehr, so ist das letzte Element leer. Wird kein Trennzeichen gefunden, dann enthält das Array genau ein Element mit dem gesamten String.


 


Einsatz der PCRE-Funktionen
 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2006 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de