[英]php regex to replace the html content
我正在使用這個 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>
我想使用 php regex 在<ul class="nav_1">
內添加此 html 代碼<li>Text</li>
<ul class="nav_1">
所以結果需要是:
<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>
正如其他人所說,使用正則表達式解析和操作 HTML 可能是一個非常令人頭疼的問題。
另一種方法是使用本機DOM庫。 進行輕微的操作非常簡單:
$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();
您可能需要根據您的類結構調整 XPath 查詢。 此 StackOverflow 問答提供了一些其他選項。
到目前為止,完成您想要的最簡單的方法是使用 JQUERY。
$(".nav_1").html("<li>Text</li>");
這是一個 JSFiddle。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.