编译失败:在偏移量4处的字符类中存在无效的范围。

3

我使用CI_Minifier,在升级PHP后遇到了问题。

现在,当我使用preg_match函数时,会收到错误提示。

if (!preg_match("/^[\w-:]+$/", $tag)) { #error line
    $node->_[HDOM_INFO_TEXT] = '<' . $tag . $this->copy_until('<>');
    if ($this->char === '<') {
        $this->link_nodes($node, false);

        return true;
    }

    if ($this->char==='>') {
        $node->_[HDOM_INFO_TEXT] .= '>';
    }
    $this->link_nodes($node, false);
    $this->char = (++$this->pos<$this->size) ? $this->doc[$this->pos] : null; // next

    return true;
}

错误信息为:

编译失败:偏移量为4的字符类无效


很可能是$this->doc元素少于4个,但$this->pos等于4。 - B001ᛦ
1个回答

12

避免使用连字符:

if (!preg_match("/^[\w\-:]+$/", $tag)) { 
或者将它放在字符类的开头:
if (!preg_match("/^[-\w:]+$/", $tag)) { 

或者在结尾处:

if (!preg_match("/^[\w:-]+$/", $tag)) { 

@TomislavTomiNikolic:我非常惊讶,它对我而言运行得相当不错。 - Toto
1
太好了,使用 \ 转义连字符后它完美运行。谢谢。 - Jodyshop
我想知道你是怎么想到避开连字符的?这是像我大多数发现一样偶然发生的吗?无论如何,感谢你的经验,它为我节省了大量的脑力和时间。这与PHP版本有关吗?我在想... - Scott Fleming
1
@ScottFleming:这是一个通用错误。invalid range in character class 已经很明显了。为了确保,始终在字符类中转义连字符。 - Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接