Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带异常的Pase bbcode_Php_Regex_Bbcode - Fatal编程技术网

Php 带异常的Pase bbcode

Php 带异常的Pase bbcode,php,regex,bbcode,Php,Regex,Bbcode,我上面的模式将bbcode重写为html,但我想从我自己的域中排除链接。是否可以修改正则表达式,使其适用于所有外部链接,但不适用于与我自己的域的链接?假设您的域是example.com,此模式将执行以下操作: $pattern = "/\[url\=(.*)\](.*)\[\/url\]/i"; 每当你想做这样的事情时,你通常会使用这个函数 它允许您指定一个回调函数,该函数可以在提供替换字符串之前检查进一步的条件,该替换字符串允许替换为相同的字符串,因此不会进行替换 /\[url\=((?:(

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

假设您的域是example.com,此模式将执行以下操作:

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

每当你想做这样的事情时,你通常会使用这个函数

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

/\[url\=((?:(?!example\.com).)*)\](.*)\[\/url\]/i

这并不总是有效的,就像[url=%65xample.com]我自己的域一样,链接[/url]作为一个url允许多种方式来表达同一个字符-这通常与简单的正则表达式不兼容。
$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);