不幸的是,我真的无法理解正则表达式,所以我最后的办法就是向你们寻求帮助。
我有这个现有代码:
<li id="id-21" class="listClass" data-author="newbie">
<div class="someDiv">
<span class="spanClass">Some content</span>
</div>
<div class="controls faint">
<a href="link2">Link 2</a>
<a href="link3">Link 3</a>
</div>
</li>
由于种种原因,我必须使用preg_replace注入一段额外的代码:
<a href="link1">Link 1</a>
我认为你可以猜到应该去哪里,但为了清楚起见,我希望结果字符串看起来像:
<li id="id-21" class="listClass" data-author="newbie">
<div class="someDiv">
<span class="spanClass">Some content</span>
</div>
<div class="controls faint">
<a href="link1">Link 1</a>
<a href="link2">Link 2</a>
<a href="link3">Link 3</a>
</div>
</li>
任何人都可以帮助我使用适当的正则表达式来实现这一目标吗?
答案 0 :(得分:1)
试试这个
$html = '<li id="id-21" class="listClass" data-author="newbie">
<div class="someDiv">
<span class="spanClass">Some content</span>
</div>
<div class="controls faint">
<a href="link2">Link 2</a>
<a href="link3">Link 3</a>
</div>
</li>';
$eleName = 'a';
$eleAttr = 'href';
$eleAttrValue = 'link2';
$addBefore = '<a href="link1">Link 1</a>';
$result = regexAddBefore($html, $eleName, $eleAttr, $eleAttrValue, $addBefore);
var_dump($result);
function regexAddBefore($subject, $eleName, $eleAttr, $eleAttrValue, $addBefore){
$regex = "/(<\s*".$eleName."[^>]*".$eleAttr."\s*=\s*(\"|\')?\s*".$eleAttrValue."\s*(\"|\')?[^>]*>)/s";
$replace = $addBefore."\r\n$1";
$subject = preg_replace($regex, $replace, $subject);
return $subject;
}
答案 1 :(得分:0)
我可以提出两件事(虽然我无法清楚地理解你的问题)
$newStr = preg_replace ('/<[^>]*>/', ' ', $htmlText);
这将删除字符串中的所有html标记。我不知道它对你有用。
另一个建议是使用strip_tags
功能。 strip_tags
的第二个参数是可选的。您可以借助第二个参数定义要保留的标记。
$str = '<li id="id-21" class="listClass" data-author="newbie">
<div class="someDiv">
<span class="spanClass">Some content</span>
</div>
<div class="controls faint">
<a href="link2">Link 2</a>
<a href="link3">Link 3</a>
</div>
</li>';
echo strip_tags ($str,'<a>');
这将为您提供输出,只显示链接和html字符串中的任何文本。
很抱歉,如果这也没有帮助。