我需要在打开的锚点结束后(锚点内容开始的地方)直接插入一个字符串。
这是我的代码:
<ul id="menu-topmenu2" class="menu">
<li id="menu-item-5" class="menu-item menu-item-type-post_type menu-item-5">
<a href="http://localhost/domain/barnlager.se/?page_id=2">
About
</a>
</li>
<li id="menu-item-5" class="menu-item menu-item-type-post_type menu-item-5">
<a href="http://localhost/domain/barnlager.se/?page_id=2">
Services
</a>
</li>
</ul>
在这个例子中,我需要在“关于”和“服务”之前的内容。一个简短的正则表达式应该做到吗?上面的HTML代码可以是名为$ content的字符串。
我使用PHP。谢谢!
答案 0 :(得分:3)
我使用解析器,例如DOM:
$content = '...your html string...';
$doc = new DOMDocument();
$doc->loadHTML('<html><body>'.$content.'</body></html>');
$x = new DOMXPath($doc);
foreach($x->query('//a') as $anchor){
// strrev(trim($anchor->nodeValue))) is just an example. put anything you like.
$anchor->insertBefore(new DOMText(strrev(trim($anchor->nodeValue))),$anchor->firstChild);
}
echo $doc->saveXML($doc->getElementsByTagName('ul')->item(0));
作为一个额外的奖励,它会抛出一个警告,你已经在HTML中定义了id="menu-item-5"
两次,这是无效的。
答案 1 :(得分:1)
您可以找到/<a.*?>/i
的每个锚标记。如果您想在此之后替换某些内容,则该调用将显示为preg_replace("/(<a.*?>)/", '$1YOUR ADDITIONAL TEXT', $content)
。
如果出于某种原因需要双引号字符串作为替换参数,请确保反斜杠 - 转义$1
。