RegEx
Tom
- php
Hallo!
Ich habe leider keine Ahnung von regulären Ausdrücken, kann mir vielleicht jemad kurz & schmerzlos helfen?!
Ich habe in meinem Gästebuch eine RegEx, die überprüfen soll, ob eine Homepage-Adresse mit, oder ohne "http://" eingegeben wurde bzw. die das "http://" abschneiden soll. Diese sieht so aus:
preg_match("/^(http://)?([^/]+)/i", $hp, $matches); $hp = $matches[2];
Nun schneidet sie aber auch Dateien oder Verzeichnisse (z.B. www.xyz.de/xyz/xyz.html) ab. Das will ich aber gar nicht!
Danke!
TOM
Hi!
Ich habe leider keine Ahnung von regulären Ausdrücken, kann mir vielleicht jemad kurz & schmerzlos helfen?!
Na klar! http://www.koehntopp.de/php/regexp.html
Gruss sven
hallo Sven
Na klar! http://www.koehntopp.de/php/regexp.html
zweifellos eine gute Adresse. Um Tom ein paar schmerzliche Erfahrungen mit dieser Adresse zu ersparen, hättest du ihn aber besser auf http://www.php.net/manual/en/function.preg-match.php hinweisen sollen ;-)
das Interessante an regulären Ausdrücken ist, daß sie fast unterschiedslos in verschiedenen "Sprachen" vorkommen können - Javascript, PHP, Perl, TCL, JAVA, ruby, Python, C/C++ ... es mag auch eine Geste sein, hier im Forum auf http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm zu verweisen. Der Ausdruck "preg_match()" kommt allerdings da nicht vor, obwohl es sich um einen PERL-kompatiblen Ausdruck handelt.
zum angesprochenen Problem: Tom sollte einfach probieren, ob "preg_match()" der korrekte Ausdruck für die Aufgabenstellung ist. Denn: "preg_match() returns an integer type rather than a boolean. There ist the meaning, that it only returns true/false ... And so You have to cast it to boolean if you want to use the result in a overloaded (by type) function". So weit ich das sehe, passiert das von Tom bemängelte "Abschneiden" ganz einfach dadurch, daß der zu untersuchende string einschließlich des regulären Ausdrucks nicht korrekt formuliert ist. Und er macht sich seine Aufgabe überhaupt viel zu schwer.
Tom möchte doch lediglich überprüfen, "ob eine Homepage-Adresse mit, oder ohne 'http://' eingegeben wurde" und bei Bedarf "das 'http://' abschneiden". Dazu braucht man gar keinen regulären Ausdruck. Dafür reicht eine "if ... else"-Abfrage, und das läßt sich doch noch etwas leichter bewerkstelligen als eine Konstruktion unter Zuhilfenahme eines regulären Ausdrucks. Das Konstrukt sähe dann generell so aus:
if ($Variable_der_Homepage = http://pfad/zur/HP)
preg_replace ("http:// abschneiden")
nur hätte man damit den Teufel mit Beelzebub ausgetrieben, und statt des einen regulären Ausdrucks einen anderen genommen
ganz ohne regulären Ausdruck geht es so:
if ($Variable_der_Homepage = http://pfad/zur/HP): /*muß ntürlich korrekt formuloert werden*/
$hp = $Variable_der_Homepage;
$hp_neu = substr($hp,6);
dann enthält die Variable $hp_neu die Homepage-Adresse ohne das "http://" und kann entsprechend weiter verarbeitet werden, z.B. mit "echo"
mit regulären Ausdrücken zu arbeiten, gehört wohl in allen Scriptsprachen zur "hohen Schule" ;-) und wenn man am Anfang steht, sollte man nach Möglichkeiten suchen, sie wirklich nur dann einzusetzen, wenn es sich nicht anders machen läßt
Grüße aus Berlin
Christoph S.
Hallo!
ganz ohne regulären Ausdruck geht es so:
if ($Variable_der_Homepage = http://pfad/zur/HP): /*muß ntürlich korrekt formuloert werden*/
$hp = $Variable_der_Homepage;
$hp_neu = substr($hp,6);
Das ist 'ne gute Idee, danke! Ich habs jetzt so gemacht, das sollte doch funktionieren:
if (substr($hp,0,7) == "http://") { $hp = substr($hp,7); }
Grüße aus Berlin
Grüße aus Freiburg
TOM
hi,
Das ist 'ne gute Idee, danke! Ich habs jetzt so gemacht, das sollte doch funktionieren:
if (substr($hp,0,7) == "http://") { $hp = substr($hp,7); }
oh ,da hatte ich mich um eine Stelle verzählt *g*
und funktionieren wird das wohl.
Christoph S.