PHP4-Forum
Forum | Befehle | MySQL | Beispiele | Newsletter | Suche | Home

Untermenü

Erweitertes
Reguläre Ausdr.
MIME-Mail
PHP und WAP
Crontab
HTTP-Header
Klassen, Objekte

Zu dieser Seite

Reguläre Ausdr.
Grundlagen I
Grundlagen II
ereg() und eregi()
Beispiel zu ereg()
ereg_replace()
Schneller mit PCRE
Beispiel zu ereg()

Wir möchten nun auch unser Versprechen einhalten, und das Beispiel von der REGEX-Eingangsseite erläutern:
$str = "dgergher45gr 894rgsg2s 453 grs4";
while(ereg(" ([[:digit:]]+)(.*)",$str,$regs)) {
  $str = $regs[2];
  $zahlen[] = $regs[1];
}
echo implode(", ",$zahlen);


Zunächst sollte der reguläre Ausdruck verstanden werden: " ([[:digit:]]+)(.*)"

Er besteht aus zwei Teilen:
([[:digit:]]+) Dieser Teil gibt an, dass mehr als eine (+) Zahl ([[:digit:]]) gefunden werden soll.
(.*) Dieser Teil gibt an, das nach der Zahl (s.o.) beliebig viele (*) beliebige Zeichen (.) gefunden werden sollen.
Das Leerzeichen am Anfang des Ausdruckes sagt, dass vor der Zahl ein Leerzeichen sein soll.

Nach dem ersten Aufruf von ereg(" ([[:digit:]]+)(.*)",$str,$regs) haben wir in dem Array $regs folgende Elemente:
$regs[0]= 894rgsg2s 453 grs4
$regs[1]=894
$regs[2]=rgsg2s 453 grs4

In $regs[1] haben wir also die erste Zahl, die wir suchen. In unserem Beispiel fügen wir sie einfach einem Array hinzu: $zahlen[] = $regs[1];

Doch wie kommen wir jetzt an die nächste Zahl? Jetzt kommen wir wieder zurück zu dem Ausdruck .*, welcher uns den gesamten Rest der Zeichenkette geliefert hat und sich nun in $regs[2] befindet. Also weisen wir unser ursprünglichen Variable $str den Rest der Zeichenkette zu $str = $regs[2]; und führen ereg() nochmal mit den gleichen Attributen aus.

Damit sind wir gleich beim nächsten Problem angelangt, denn wir wissen ja nicht, wieviele Ergebnisse es gibt, also wie oft wir dann die Funktion ereg() aufrufen sollen! Doch zum Glück gibt die Funktion ereg() WAHR zurück, wenn der reguläre Ausdruck etwas gefunden hat und FALSCH, wenn nicht. Daraus können wir dann eine Schleife machen, die solange ausgeführt wird, wie ereg() WAHR zurückgibt.

Die letzte Zeile hat zwar nichts mit den regulären Ausdrücken zu tun, sie soll lediglich die Ergebnisse (die Zahlen die wir in das Array $zahlen geschrieben haben) darstellen.

Und somit wäre der komplette Code des Beispiels erklärt. Falls es dazu noch Fragen gibt, steht das Forum immer für Sie zu Verfügung.
Dienstleistungen | Werbung | Impressum | Sitemap | Kontakt | Email © 1999 - 2013 | Last Update: 23.02.2001