Das mit den Klammern hab ich letztens schon für einen gelöst. "Andere Zeichen" müsstest Du erst mal auflisten, damit sie in die Regex eingebaut werden können.
Hier jedenfalls die Lösung für die Klammern in der URL:
Code: Alles auswählen
#
#-----[ OPEN ]------------------------------------------
#
includes/bbcode.php
#
#-----[ FIND ]------------------------------------------
#
$patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
#
#-----[ REPLACE WITH ]------------------------------------------
#
$patterns[] = "#\[url\]([\w]+?://([\w\#$%()&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
#
#-----[ FIND ]------------------------------------------
#
$patterns[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
#
#-----[ REPLACE WITH ]------------------------------------------
#
$patterns[] = "#\[url\]((www|ftp)\.([\w\#$%()&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is";
#
#-----[ FIND ]------------------------------------------
#
$patterns[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
#
#-----[ REPLACE WITH ]------------------------------------------
#
$patterns[] = "#\[url=([\w]+?://[\w\#$%()&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
#
#-----[ FIND ]------------------------------------------
#
$patterns[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
#
#-----[ REPLACE WITH ]------------------------------------------
#
$patterns[] = "#\[url=((www|ftp)\.[\w\#$%()&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
#
#-----[ FIND ]------------------------------------------
#
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
#
#-----[ REPLACE WITH ]------------------------------------------
#
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%()&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
#
#-----[ FIND ]------------------------------------------
#
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
#
#-----[ REPLACE WITH ]------------------------------------------
#
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%()&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Eigentlich muss man nicht replacen. Wenn Du Dir die Zeilen genauer ansiehst, wirst Du bemerken, das nur jeweils
() an eine Stelle in der Regex eingebaut wurde.
Grüße,
Tekin