specifics用php函数替换string中的substring
in the text, i would like to replace the div tag li. But not everyone just certain well defined. In this case, those that have id that begins "tab-*" I need something using PHP functions easily from text:
<div id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
<div id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
get this text
<li id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
<li id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
Can you advise me?
Thank you
在文中,我想替换 div strong>标签 li 即可。 但不是每个人都确定定义明确。 在这种情况下,那些id开头“tab - *”
我需要使用PHP函数轻松地从文本中获取: p>
获取此文本 p>
你能告诉我吗? p>
谢谢 p>
div>
&lt; div id =“tab-141285” 类=“我的级”&GT;
&lt; div class =“my-subclass”&gt;
&lt; div&gt;
Lorem ipsum dolor sit amet consectetuer
&lt; / div&gt;
&lt; / div&gt;
&LT; / DIV&GT;
&lt; div id =“tab-85429”class =“my-class”&gt;
&lt; div class =“my-subclass”&gt;
&lt; div&gt;
Lorem ipsum dolor sit amet consectetuer
&lt; / div&gt;
&lt; / div&gt;
&lt; / div&gt;
code> pre>
&lt; li id =“tab-141285” 类=“我的级”&GT;
&lt; div class =“my-subclass”&gt;
&lt; div&gt;
Lorem ipsum dolor sit amet consectetuer
&lt; / div&gt;
&lt; / div&gt;
&LT; /锂&GT;
&lt; li id =“tab-85429”class =“my-class”&gt;
&lt; div class =“my-subclass”&gt;
&lt; div&gt;
Lorem ipsum dolor sit amet consectetuer
&lt; / div&gt;
&lt; / div&gt;
&lt; / li&gt;
code> pre>
Regular expressions are not adequate for parsing HTML. Any regex you try to use will be fragile. I suggest using the DOM extension for this instead.
The idea is to:
- Find all the
<div>
elements that have anid
attribute that begins with"tab-"
using the XPath query//div[starts-with(@id, "tab-")]
-
Create a new
<li>
element for each of them. - Move all the
<div>
's attributes and child nodes to the new<li>
element. - Replace the old
<div>
with the new<li>
.
Because your string doesn't have a root element, we'll do a little dance before and after to put it in one then rebuild it.
Example:
$html = <<<'HTML'
<div id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
<div id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</div>
HTML;
$dom = new DOMDocument();
$dom->loadHTML("<div>$html</div>", LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//div[starts-with(@id, "tab-")]');
foreach ($nodes as $node) {
$li = $dom->createElement('li');
while ($node->attributes->length) {
$li->setAttributeNode($node->attributes->item(0));
}
while ($node->firstChild) {
$li->appendChild($node->firstChild);
}
$node->parentNode->replaceChild($li, $node);
}
$html = '';
foreach ($dom->documentElement->childNodes as $node) {
$html .= $dom->saveHTML($node);
}
echo $html;
Output:
<li id="tab-141285" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
<li id="tab-85429" class="my-class">
<div class="my-subclass">
<div>
Lorem ipsum dolor sit amet consectetuer
</div>
</div>
</li>
use domdocument xml component of php just load the string in domdocument object and search for element then get its attribute and check its id and compare using preg_replace and remove if it met your condition