首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有异常的Pase bbcode

具有异常的Pase bbcode
EN

Stack Overflow用户
提问于 2012-05-11 18:23:03
回答 2查看 54关注 0票数 0
代码语言:javascript
复制
$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";

我上面的模式将bbcode重写为html,但是我想排除来自我自己域的链接。有没有可能修改正则表达式,使它将适用于所有外部链接,但不与我自己的域名链接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-11 18:45:08

每当您想要这样做的时候,通常都会使用preg_replace_callback函数。

它允许您指定一个回调函数,该函数可以在提供替换字符串之前检查进一步的条件,从而允许用相同的字符串“替换”,因此不会进行替换。

代码语言:javascript
复制
$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);
票数 0
EN

Stack Overflow用户

发布于 2012-05-11 18:39:47

假设您的域是example.com,此模式完成以下工作:

代码语言:javascript
复制
/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10549584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档