org\parser\driver\Ubb::closeTag PHP Метод

closeTag() приватный Метод

解析闭合标签,支持嵌套
private closeTag ( string $data, array $rule = '' ) : string
$data string 要解析的数据
$rule array 解析规则
Результат string 解析后的内容
    private function closeTag($data, $rule = '')
    {
        static $tag, $reg, $func, $count = 0;
        if (is_string($data)) {
            list($tag, $reg[0], $reg[1], $func) = $rule;
            do {
                $data = preg_replace_callback("/({$reg[0]})(.*?)({$reg[1]})/is", [$this, 'closeTag'], $data);
            } while ($count && $count--);
            //递归解析,直到嵌套解析完毕
            return $data;
        } elseif (is_array($data)) {
            $num = count($data);
            if (preg_match("/{$reg[0]}/is", $data[$num - 2])) {
                //存在嵌套,进一步解析
                $count = 1;
                $data[$num - 2] = preg_replace_callback("/({$reg[0]})(.*?)({$reg[1]})/is", [$this, 'closeTag'], $data[$num - 2] . $data[$num - 1]);
                return $data[1] . $data[$num - 2];
            } else {
                //不存在嵌套,直接解析内容
                $parse = '_' . $func;
                $data[$num - 2] = trim($data[$num - 2], "\r\n");
                //去掉标签内容两端的换行符
                return $this->{$parse}($tag, $data);
            }
        }
    }