$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";我上面的模式将bbcode重写为html,但是我想排除来自我自己域的链接。有没有可能修改正则表达式,使它将适用于所有外部链接,但不与我自己的域名链接?
发布于 2012-05-11 18:45:08
每当您想要这样做的时候,通常都会使用preg_replace_callback函数。
它允许您指定一个回调函数,该函数可以在提供替换字符串之前检查进一步的条件,从而允许用相同的字符串“替换”,因此不会进行替换。
$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";
$callback = function($matches)
{
$url = $matches[1];
if (is_own_domain_url($url)) {
return $matches[0]; # no changes
} else {
$title = $matches[2];
return sprintf('<a href="%s">%s</a>'
, htmlspecialchars($url)
, htmlspecialchars($title)
);
}
}
$html = preg_replace_callback($pattern $callback, $bbcode);发布于 2012-05-11 18:39:47
假设您的域是example.com,此模式完成以下工作:
/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/ihttps://stackoverflow.com/questions/10549584
复制相似问题