使用Regex查找未被BBcode包围的字符串

时间:2011-09-12 14:26:24

标签: php regex bbcode

我需要一个正则表达式,只有当它不在[url] BBcode中时才能找到并替换字符串中的单词/短语。

$string = "Word [url='http://domain.com']Word test[/url]";

正则表达式不应该对“Word测试”做任何事情,只有第一次出现“Word”。

编辑:更具体地说,这是一个论坛软件的插件,用于监控艺术家提及的消息。如果出现这种情况,则艺术家的名称将替换为关于该艺术家的线索的URL,除非它不是URL的一部分(在链接本身或desc中)。经过第二次思考后,如果它用于任何非纯标记的标签(b,i,u,颜色,列表等),则不应触发它。因此,定义可以替换哪些标记的简单方法将非常棒!

提前致谢!

1 个答案:

答案 0 :(得分:0)

$inputStr = "Coldplay [URL='localhost/threads/coldplay-paradise.32/']Coldplay - \"Paradise\"[/URL] Coldplay";

function replace( $matches ) {
    if( isset( $matches[2] ) && $matches[2] )
        return "[url='coldplay']".$matches[2]."[/url]";
    return $matches[0];
}

$regex = '/(\[.*?\].*?\[\/.*?\])?(Coldplay)?(.+?)?/si';
$outputStr = preg_replace_callback( $regex, 'replace', $inputStr );
echo $outputStr;

结果:

[url='coldplay']Coldplay[/url][URL='localhost/threads/coldplay-paradise.32/']Coldplay - "Paradise"[/URL] [url='coldplay']Coldplay[/url]