| |
| * Link führt ins Internet |
|
| |
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
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
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.
|
|
|
|
|
|
|