PHP preg_replace

monstergnom

Ensign
Registriert
Sep. 2009
Beiträge
132
Hallo,
ich habe im Moment ein kleines Problem mit preg_replace.

Nämlich:
Ich möchte ein paar Smileys aus einer Datenbank auslesen und die Kürzel der Smileys (welche im Text vorkommen, also BBCODE) in Bilder umwandeln.
Da ich leider einige Smileys mit Sonderzeichen wie z. B. ":/" habe, werden auch andere Sachen umgewandelt (wenn ich es mit str_replace realisiere).

Deswegen muss ich irgendwie nur auf ganze Wörter überprüfen lassen und die Sonderzeichen des Smiley-Shortcuts im Pattern ignorieren.

Hier mal die Smileys welche über die DB auslesen lasse:
Code:
:D, :/, 8), ;(, ]:D, \:P, :], xD, :|, :O, ^^, >:(, :(, *.*, :), ;0, ;), :()

Das Auslesen funktioniert soweit aber ich komm mit dem Ersetzen nicht weiter. :confused_alt:


MfG
monstergnom
 
So habe ich das jetzt mal gelöst:
Code:
Bedenke das ]:D vor :D ersetzt wird

PHP:
$pattern = array();
$ersatz = array();

$pattern[] = '(\]\:D)';
$pattern[] = '(\:\(\))';
$pattern[] = '(\:D)';
$pattern[] = '(\:\/)';
$pattern[] = '(8\))';
$pattern[] = '(\;\()';
$pattern[] = '(\\\:P)';
$pattern[] = '(\:\])';
$pattern[] = '(xD)';
$pattern[] = '(\:\|)';
$pattern[] = '(\:O)';
$pattern[] = '(\^\^)';
$pattern[] = '(\>\:\()';
$pattern[] = '(\:\()';
$pattern[] = '(\*\.\*)';
$pattern[] = '(\:\))';
$pattern[] = '(\;0)';
$pattern[] = '(\;\))';

$ersatz[] = '<img src="bla1.jpg" />';
$ersatz[] = '<img src="bla2.jpg" />';
$ersatz[] = '<img src="bla3.jpg" />';
$ersatz[] = '<img src="bla4.jpg" />';
$ersatz[] = '<img src="bla5.jpg" />';
$ersatz[] = '<img src="bla6.jpg" />';
$ersatz[] = '<img src="bla7.jpg" />';
$ersatz[] = '<img src="bla8.jpg" />';
$ersatz[] = '<img src="bla9.jpg" />';
$ersatz[] = '<img src="bla10.jpg" />';
$ersatz[] = '<img src="bla11.jpg" />';
$ersatz[] = '<img src="bla12.jpg" />';
$ersatz[] = '<img src="bla13.jpg" />';
$ersatz[] = '<img src="bla14.jpg" />';
$ersatz[] = '<img src="bla15.jpg" />';
$ersatz[] = '<img src="bla16.jpg" />';
$ersatz[] = '<img src="bla17.jpg" />';
$ersatz[] = '<img src="bla18.jpg" />';

$string = ':D, :/, 8), ;(, ]:D, \:P, :], xD, :|, :O, ^^, >:(, :(, *.*, :), ;0, ;), :()';

echo preg_replace($pattern, $ersatz, $string);
 
Funktioniert wunderbar, vielen Dank!

Hier noch die Lösung damit er nur ganze Wörter annimmt:
PHP:
$smiley = "\;\(";
$pattern = "/((?<=\s|^)(".$smiley.")(?=\s|$))/";

MfG
 
Zurück
Oben