PHP preg_replace用H1替换超链接

时间:2012-10-27 15:59:39

标签: php html regex

我写正则表达式很糟糕,所以我正在寻求帮助。

我有以下字符串:

<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>

想要用H1替换超链接。

使用正则表达式是否有一种简单的方法可以做到这一点,还要记住标题,超链接和锚文本的变化吗?

2 个答案:

答案 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();