我需要一个正则表达式,只有当它不在[url] BBcode中时才能找到并替换字符串中的单词/短语。
$string = "Word [url='http://domain.com']Word test[/url]";
正则表达式不应该对“Word测试”做任何事情,只有第一次出现“Word”。
编辑:更具体地说,这是一个论坛软件的插件,用于监控艺术家提及的消息。如果出现这种情况,则艺术家的名称将替换为关于该艺术家的线索的URL,除非它不是URL的一部分(在链接本身或desc中)。经过第二次思考后,如果它用于任何非纯标记的标签(b,i,u,颜色,列表等),则不应触发它。因此,定义可以替换哪些标记的简单方法将非常棒!
提前致谢!
答案 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]