0
$pattern = "/\[url\=(.*)\](.*)\[\/url\]/i";

上記のパターンは bbcode を html に書き換えますが、自分のドメインからのリンクを除外したいと考えています。正規表現を変更して、すべての外部リンクでは機能するが、自分のドメインへのリンクでは機能しないようにすることはできますか?

4

2 に答える 2

0

ドメインが であると仮定するとexample.com、このパターンは次のように機能します。

/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i
于 2012-05-11T10:39:46.810 に答える
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);
于 2012-05-11T10:45:07.977 に答える