$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";
我上面的模式将bbcode重写为html,但我想从我自己的域中排除链接。是否可以修改正则表达式,以便它适用于所有外部链接,但不适用于我自己域名的链接?
答案 0 :(得分:0)
假设您的域名为example.com
,此模式可以胜任:
/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i
答案 1 :(得分:0)
每当你想做类似的事情时,通常都会使用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);