Php 正则表达式匹配<;ul>;元素

Php 正则表达式匹配<;ul>;元素,php,html,regex,Php,Html,Regex,我一直在研究一个分类系统,它输出数据库中的所有分类。 因为我(理论上)拉无限分类,所以有时我有元素,这些元素不包含元素(或除空格以外的任何其他元素) 我目前正在使用jQuery过滤这些元素,但您可能也同意这不是最有效的方法。 我一直在尝试创建一个正则表达式,以便用空字符串替换这些空的元素,但到目前为止我运气不太好 <ul class="nav navbar-nav catagory" style="display:none;"> </ul> 修复实际上相当简单,只需重

我一直在研究一个分类系统,它输出数据库中的所有分类。 因为我(理论上)拉无限分类,所以有时我有
元素,这些元素不包含
  • 元素(或除空格以外的任何其他元素)

    我目前正在使用jQuery过滤这些
    元素,但您可能也同意这不是最有效的方法。 我一直在尝试创建一个正则表达式,以便用空字符串替换这些空的
    元素,但到目前为止我运气不太好

    <ul class="nav navbar-nav catagory" style="display:none;">
    
    </ul>
    
    修复实际上相当简单,只需重新返回一个空字符串,而不是从模板中进行解析。
    谢谢你的帮助

    这里需要强调的重要一点是,列表打开和关闭标记之间只有空白。因为我们不解析任何层次数据,所以regex可以有效地进行解析

    更具可读性的解决方案:

    • \]*\>\s*\
    稍微安全一点的版本会在出现恶意空白的情况下使用更多的
    \s*

    • \]*\>\s*\

    你确定
    regex
    会比JS快吗?JS实际上理解DOM?regex可能不是最好的方法。请改用DOM解析器。请改用。使用正则表达式解析HTML/XML是已知的原因。我不想在页面发送给用户后再这样做。想象一下当用户没有启用JS时会发生什么。PHP也可以处理。谢谢你的回答,我用其他方法解决了这个问题。但还是要感谢你的努力。
    $str = '<ul class="nav navbar-nav catagory" style="display:none;">             </ul>';
    preg_match('!\<ul\>/ +/\<\/ul\>!', $str, $matches);
    
    function build_catagory($parent, $row = NULL)
    {
        global $db, $template;
    
        // Initialise array
        $data = array();
    
        // Next level parent
        $next = $parent + 1;
    
        // Basic SQL statement
        $sql = "SELECT * FROM Rubriek";
    
        // Where condition based on $row
        if(is_null($row))
        {
            $where = " WHERE Hoofdrubriek IS NULL";
        }
        else 
        {
            $where = " WHERE Hoofdrubriek = '" . $row['Rubrieknummer'] . "'";
        }
    
        // Execute query
        $stmt = $db->query($sql . $where);
    
        if($stmt)
        {
            // Create new instance of template engine (set output to false)
            $catagory = new Template('{', '}', array('content'), FALSE);
    
            // Load template
            $catagory->load(T_TEMPLATE_PATH . '/rubrieken.html', 'content');
    
            // Fetch results
            while($row = $db->fetch($stmt))
            {
                $data[] = array(
                    'CATAGORY_NAME'     => ucfirst(strtolower($row['Rubrieknaam'])),
                    'CATAGORY'          => build_catagory($next, $row),
                );
            }
    
            // Assign data to the template
            $catagory->assign_vars(array(
                'CATAGORIES'            => $data,
                'CATAGORIES_DISPLAY'    => ($parent == 0 ? '' : 'style="display:none;"'),
            ));
    
            // Return catagory
            return $catagory->parse();
        }
        else
        {
            return '';
        }
    }