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 '';
}
}