替换html内容的php正则表达式
我正在使用这个html代码替换html内容的php正则表达式,php,regex,Php,Regex,我正在使用这个html代码 <ul class="nav_1"> <li> <a href="#">Home</a> <ul class="submenu_nav_1"> <li> <a href="#">Home</a> <ul class="submenu_nav_
<ul class="nav_1">
<li>
<a href="#">Home</a>
<ul class="submenu_nav_1">
<li>
<a href="#">Home</a>
<ul class="submenu_nav_1_1">
<li><a href="#">Home</a></li>
<li><a href="#">Menu Item 1</a></li>
</ul>
</li>
<li><a href="#">Menu Item 1</a></li>
</ul>
</li>
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
</ul>
<ul class="nav_2">
<li><a href="#">Home</a></li>
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
</ul>
-
-
我想使用php正则表达式在
中添加此html代码文本
因此,结果必须是:
<ul class="nav_1">
<li>Text</li>
</ul>
<ul class="nav_2">
<li><a href="#">Home</a></li>
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
</ul>
- 正文
但当我尝试这段php代码时:
<?php
$html = preg_replace('/(.*?<ul[^>]*?class=[\"|\']nav_1[\"|\'][^>]*>).*(<\/ul>.*)/s','$1'.PHP_EOL.'<li>Text</li>'.PHP_EOL.'$2',$html);
echo $html;
?>
但此代码返回:
<ul class="nav_1">
<li>Text</li>
</ul>
- 正文
到目前为止,实现所需的最简单方法是使用JQUERY
$(".nav_1").html("<li>Text</li>");
$(“.nav_1”).html(“Text ”);
这是一个JSFIDLE
正如其他人所说,用正则表达式解析和操作HTML虽然可能,但却是一个巨大的难题
另一种方法是使用本机库。做一些小动作很简单:
$html = <<<HTML
<ul class="nav_1">
<li>
<a href="#">Home</a>
<ul class="submenu_nav_1">
<li>
<a href="#">Home</a>
<ul class="submenu_nav_1_1">
<li><a href="#">Home</a></li>
<li><a href="#">Menu Item 1</a></li>
</ul>
</li>
<li><a href="#">Menu Item 1</a></li>
</ul>
</li>
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
</ul>
<ul class="nav_2">
<li><a href="#">Home</a></li>
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a></li>
</ul>
HTML;
// Load original HTML
$dom = new DOMDocument();
$dom->loadHTML($html);
// Find any <ul> with the class "nav_1"
$pathSearch = new DOMXPath($dom);
$ul = $pathSearch->query('//ul[@class="nav_1"]')->item(0);
// Remove the <ul>'s content
while ($ul->hasChildNodes()) {
$ul->removeChild($ul->firstChild);
}
// Add a new <li> child element with the content "Text"
$ul->appendChild($dom->createElement('li', 'Text'));
echo $dom->saveHTML();
$html=项目(0);
//删除的内容
而($ul->hasChildNodes()){
$ul->removeChild($ul->firstChild);
}
//添加内容为“Text”的新- 子元素
$ul->appendChild($dom->createElement('li','Text'));
echo$dom->saveHTML();
您可能需要根据类结构调整XPath查询。提供了一些其他选项。通过使用,您可能会有更多的运气(以及总体易用性)。这称为解析。不要使用正则表达式解析HTML文档。改用DOM解析器。我建议找到一种不用正则表达式的方法使用parserI需要使用php而不是jquery获得上面列出的结果。您能解释一下原因吗?它需要是动态的吗?这就是你为什么要使用正则表达式的原因吗?