Hi tobler,
Muss der Delimiter immer angegeben werden, und was passiert, wenn man ihn weglässt?
Ja. Probiers doch mal aus ;-)
Hätte dann
preg_match('/foobar/', $_POST['text']);
dieselben Auswirkungen wie
preg_match('foobar', $_POST['text']);
Nein, ersteres klappt und liefert true oder false zurück, letzeres dürfte einer Fehlermeldung à la "No Delimiter found" ausgeben.
Müsste der Code zum Ersetzen von :-) mit <img...> (wenn er auch mit str_replace einfacher gehen würde) so
$fcom=preg_replace('/:-)/','<img...>',$fcom);
Nein, ) ist ein Zeichen für eine Subpattern, du musst es wie Alexander schon sagte durch einen Backslash escapen:
preg_replace("/:-\)/",'<img src="pfad/zum/smiley.gif" alt="">', $string);
Was Alexander jetzt noch gemacht hat, er hat direkt Subpattern verwendet und den Ausdruck :-) noch mal eingeklammert, dann kannst du im ersetzen-Teil durch \1 bzw. $1 (ersteres ist veraltet) auf den Wert zugreifen.
Das macht jetzt in diesem Fall nicht wirklich Sinn, aber für einen Link wirst du es brauchen:
preg_replace("=\[link:(http://|ftp://|mailto:)([^\]*)\]=",'<a href="$1$2">$2</a>', $string);
Hier würden jetzt http://, ftp:// und mailto: Links ersetzt. Als Delimiter habe ich = gewählt, sonst hätte ich die ganzen / ebenfalls escapen müssen. Die Links werden jetzt hier allerdings nicht auf Gültigkeit geprüft (optisch), so wie hier im Forum, @title ist auch nicht drin.
MfG, Dennis.
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:( mo:} zu:|
[remote-signature:http://tutorial.riehle-web.com/selfforum/signatur.php]