blackbird
21.08.2007, 17:17
Hallo,
ich bin beim basteln einer RegEx für eine bestimmte Anwendung
auf ein Verhalten meines Ausdruckes gestossen, den ich beim
besten Willen nicht interpretieren kann.
Untenstehender Ausdruck stammte ursprünglich aus einer
Mailadressen-Validierung, ich habe ihn beim Einkreisen des
Problems schon etwas reduziert.
(Ich weiss, dass man mit diesem Muster nicht alle RFC-konformen
Mailadressen erwischt, darum geht es mir nicht. Ich möchte nur
wissen, ob ich den Ausdruck nicht richtig interpretiere oder
ob irgendein Bug (oder Feature) im PHP steckt.)
Basis ist ein Linux mit
Novell SLES 10 SP1
PHP 5.1.2-29.45
Ich verstehe die Regex "muster" aus untenstehenden Programmschnipsel
wie folgt:
- Am Anfang des Strings muss ein "@" stehen.
- Dann kommen ein oder mehrere Buchstaben u/o Ziffern
- Optional folgen beliebig oft, durch "." oder "-" getrennt, weitere Buchstaben/Zifferngruppen
- Hinter dem letzten Punkt muß eine beliebig lange, aber mindestens 2 Zeichen, Buchstabenfolge stehen, bevor das Stringende kommt.
<?php
$teststring = "@xy.ertzgrfrtezgdkjkjkjktzzegt";
$muster = "/^@[A-Za-z\d]+([\.\-]?[a-zA-Z\d]+)*\.[A-Za-z]{2,}$/";
if(preg_match($muster, $teststring))
{
echo "Passt schon\n";
} else
{
echo "Passt net\n";
}
?>
Was ich jetzt nicht verstehe:
Wenn der "teststring" aus meinem Beispielprogramm hinter dem Punkt 2 bis
zu 20 Zeichen hat, passt der Ausdruck. Stehen 21 Zeichen hinter dem
Punkt oder mehr, dann passt er nicht mehr ("Passt net").
Warum gerade ab 21 Zeichen.
Übrigens, wenn ich das gleiche PHP-Programm auf einem Novell Netware
Server (NW6.5 SP6) ausführe, kriege ich einen ABEND im PHP5LIB.NLM
wenn mein Teststring 21 oder mehr Zeichen hinter dem letzten Punkt hat.
Ein ABEND unter Netware ist etwa das, was eine Schutzverletzung in
anderen Betriebssystemen ist.
Schonmal vielen Dank
V. Vogel
ich bin beim basteln einer RegEx für eine bestimmte Anwendung
auf ein Verhalten meines Ausdruckes gestossen, den ich beim
besten Willen nicht interpretieren kann.
Untenstehender Ausdruck stammte ursprünglich aus einer
Mailadressen-Validierung, ich habe ihn beim Einkreisen des
Problems schon etwas reduziert.
(Ich weiss, dass man mit diesem Muster nicht alle RFC-konformen
Mailadressen erwischt, darum geht es mir nicht. Ich möchte nur
wissen, ob ich den Ausdruck nicht richtig interpretiere oder
ob irgendein Bug (oder Feature) im PHP steckt.)
Basis ist ein Linux mit
Novell SLES 10 SP1
PHP 5.1.2-29.45
Ich verstehe die Regex "muster" aus untenstehenden Programmschnipsel
wie folgt:
- Am Anfang des Strings muss ein "@" stehen.
- Dann kommen ein oder mehrere Buchstaben u/o Ziffern
- Optional folgen beliebig oft, durch "." oder "-" getrennt, weitere Buchstaben/Zifferngruppen
- Hinter dem letzten Punkt muß eine beliebig lange, aber mindestens 2 Zeichen, Buchstabenfolge stehen, bevor das Stringende kommt.
<?php
$teststring = "@xy.ertzgrfrtezgdkjkjkjktzzegt";
$muster = "/^@[A-Za-z\d]+([\.\-]?[a-zA-Z\d]+)*\.[A-Za-z]{2,}$/";
if(preg_match($muster, $teststring))
{
echo "Passt schon\n";
} else
{
echo "Passt net\n";
}
?>
Was ich jetzt nicht verstehe:
Wenn der "teststring" aus meinem Beispielprogramm hinter dem Punkt 2 bis
zu 20 Zeichen hat, passt der Ausdruck. Stehen 21 Zeichen hinter dem
Punkt oder mehr, dann passt er nicht mehr ("Passt net").
Warum gerade ab 21 Zeichen.
Übrigens, wenn ich das gleiche PHP-Programm auf einem Novell Netware
Server (NW6.5 SP6) ausführe, kriege ich einen ABEND im PHP5LIB.NLM
wenn mein Teststring 21 oder mehr Zeichen hinter dem letzten Punkt hat.
Ein ABEND unter Netware ist etwa das, was eine Schutzverletzung in
anderen Betriebssystemen ist.
Schonmal vielen Dank
V. Vogel