Dennis: RegEx: Fragen :-)

Beitrag lesen

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]