RegEx, mal wieder ...

BadMatt

Erfahrenes Mitglied
Hey,
also es geht mal wieder um Regular Expressions.

Aber dieses mal etwas anders als sonst!

Ich hoffe ihr versteht was ich meine, denn ich weiss nicht wie ich das richtig formulieren soll^^

Und zwar:
Wie kann ich ein bestimmtes Zeichen, oder ein ganzes Wort (!) auszuschließen.
Also das ein bestimmtes Wort nicht "benutzt" wird.
Also z.B:

PHP:
$string = "[a=javascript:alert('hallo')]Hallo[/a] - [a=http://www.hanz.de]Hallo[/a]";
$string = preg_replace("#\[a=(.*?)\](.*?)\[/a\]#si", "<a href=\"\\1\">\\2</a>", $string);

Da ist ja im ersten "link" ein javascript. Ich will aber nicht, dass es solche Links umsetzt.
Den zweiten Link (http://www.hanz.de) soll es aber ganz normal ersetzten.

Wie mache ich das am besten?
Gibts da irgendein Suchmuster, das das "javascript:" aussschliest in [a]-Tags?

Oder muss ich das dann erst immer mit preg_match oder so prüfen, ob da n "javascript" drin vorkommt?

Ich hoffe ihr habt verstanden was ich mein, und habt ne Antwort parat.
Danke =)
 
Mhh, hört sich eigentlich gar nicht so dumm an^^

Du meinst also so:
PHP:
$string = preg_replace("#\[a=([http|www|ftp].*?)\](.*?)\[/a\]#si", "<a href=\"\\1\">\\2</a>", $string);
 
PHP:
$string = preg_replace('#\[a=((?:http|ftp)s?://[^\]]+)\](.*?)\[/a\]#sie', '"<a href=\"".htmlspecialchars("\1")."\">".htmlspecialchars("\2")."</a>"', $string);
 
Das htmlspecialchars brauch ich nicht, das hab ich schon woanders drin ;) :P
Aber da deine Version vermutlich doch die bessere ist, hab ich noch n paar Fragen dazu :P

1.: wie kann ich da noch einbaun, das es auch geht, wenn ich nur "www." hab, wie muss ich das einbaun? hab probiert einfach n www| davor zu hängen, ging aber net :(

2.:das "?:" und "s?" sowas das "+" am schluss, was bedeuten die einzelnen befehle?

3.: das e(am schluss "#sie"), heisst was genau? warum hasst das hingehängt?

Danke das du dir die mühe gibst, mir das zu erklären ;) :P
 
Zurück