[Python-de] Regulärer Ausdrücke

Fritz Cizmarov fritz at sol.at
Sam Jan 3 15:20:59 CET 2004


Am Sat, 3 Jan 2004 14:55:20 +0100
Schrieb "Stefan J. Betz" <stefan_betz at gmx.net>:

> Hallo Liste,
> 
> ich habe ein Programm in dem ich prüfen will ob ein übergebener
> Paramter eine IP ist, ich habe das "Problem" zwar gelöst, aber dennoch
> frage ich mich warum die RE:
> "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
> 
> Nicht Funktioniert, aber die RE:
> "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"
> 
> funktioniert einwandrei!
> 
> Gestestet habe ich das mit folgendem Miniprogramm:
> import re
> 
> ipre = re.compile("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")
> ipre.match("127.0.0.1")
> <SRE_Match object at 0x81311b8>#, das ist ja nicht weiter schlimm...
> #aber:
> ipre.match("127.0.0.1156489489")
> <SRE_Match object at 0x8110838># Ist schon nichtmehr so toll, weil die
> #IP ja ungültig ist :-(
> 
> Mit der zweiten RE von oben funktioniert es aber, spielt das
> "erfassen" von Stringanfang und Stringende wirklich eine so große
> Rolle?
> 
> mfg Betz Stefan
> -- 


Hallo Stefan,

Im ersten Fall wird nur getestet ob das Muster innerhalb des Strings
vorkommt, und das tut es auch in "127.0.0.1156489489", da es egal ist ob
nochetwas davor oder dahinter steht. Wenn Du dir das Ergebnis
zurückgeben lässt, erhältst Du "127.0.0.115". Nur wenn Stringanfang und
Stringende markiert werden, wird der ganze Strin mit dem Muster
verglichen, da ja beim 2. Regex Stringanfang und Stringende mit zum
Muster gehören.


Gruß

Fritz