我写正则表达式很糟糕,所以我正在寻求帮助。
我有以下字符串:
<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>
想要用H1替换超链接。
使用正则表达式是否有一种简单的方法可以做到这一点,还要记住标题,超链接和锚文本的变化吗?
答案 0 :(得分:1)
preg_replace('/<a[^>]*>(\w+)<\/a>/', '<h1>$1</h1>', $subject);
']'将匹配除''>'之外的所有字符,'*'表示它将匹配前面的零个或多个字符,然后'&gt;'将在那之后,然后它将捕获内部的所有内容(),'\ w'将匹配任何单词字符,+将匹配至少一个出现在其前面的字符然后''将出现(正斜杠需要被转义) )。
$ subject可以是完整的HTML文档,也可以只是你的字符串。
答案 1 :(得分:1)
如果您的输入不重要,我会阻止使用正则表达式。多行html标签,非格式良好的输入,嵌入式标签可以让你的解决方案变得简单。请尝试使用DOM类:
$in = '<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>';
$dom = new DOMDocument;
$dom->loadHTML($in);
// you can use any method to select the nodes in interest, if you need more power use xpath.
foreach ($dom->getElementsByTagName('a') as $a) {
$replacement = $dom->createElement('h1');
// poor man's innerHTML
foreach ($a->childNodes as $cn) {
$replacement->appendChild($cn);
}
$a->parentNode->replaceChild($replacement, $a);
}
print $dom->saveHTML();