DeeJTwoK
Erfahrenes Mitglied
Hi, mit diesem Code klappt es:
Ergebnis:
(getestet via http://regexp-tester.mediacix.de/exp/regex/)
Ich wage mich mal vor, ohne es getestet zu haben (geht grad leider nicht):
PHP:
<?php
$string = "wortA :(( :)):( :D :) :D wortB :D :(( wortC :)) :( :) :D:)) :(( wortD :D :(( :)) :) :( :D";
$regex = "/((( ?:D ?)|( ?:\(\( ?)|( ?:\( ?)|( ?:\)\) ?)|( ?:\) ?)){1,3})(( ?:D ?)|( ?:\(\( ?)|( ?:\( ?)|( ?:\)\) ?)|( ?:\) ?))*/";
$replace = "\1";
$newString = preg_replace ($regex, $replace, $string, -1 );
?>
Code:
wortA :(( :)):( wortB :D :(( wortC :)) :( :) wortD :D :(( :))
Ich wage mich mal vor, ohne es getestet zu haben (geht grad leider nicht):
PHP:
<?php
function SmilieSwap($string) {
$smiley_codes = array();
$abfrage = mysql_query('SELECT * FROM icc_smilie WHERE chat = "'.$chatadresse.'"');
while ($row = mysql_fetch_object($abfrage)) {
// macht aus :)) dieses \:\)\), und aus :D dieses \:D
// neben das D müsstest du noch all in deinen Smileys vorkommenden nicht-Regex-Zeichen packen, z.B. [^DEFG]
$smiley_codes[] = preg_replace("([^D])", "\\\1", "( ?".$row->text." ?)"); // ergibt ( ?\:\) ?)
}
$allsmiley_regex = implode("|", $smiley_codes); // ergibt ( ?\:\) ?)|( ?\:\( ?)|( ?\:\)\) ?) usw.
$threesmiley_regex = "/(".$allsmiley_regex."{1,3})".$allsmiley_regex."*/"; // ergibt den "$string" aus erstem PHP-Code
return preg_replace ($threesmiley_regex, "\1", $string, -1 );
}
$message = "wortA :(( :)):( :D :) :D wortB :D :(( wortC :)) :( :) :D:)) :(( wortD :D :(( :)) :) :( :D";
$message = SmilieSwap($message);
echo $message;
?>
Zuletzt bearbeitet: