我不擅长编写正则表达式,所以正在寻求帮助。
我有以下字符串:
<li class="current-menu-item"><a title="Site Name" href="http://www.example.com/">Home</a></li>
想要用 H1 替换超链接。
有没有一种使用正则表达式的简单方法来做到这一点,记住标题、超链接和锚文本的变化?
preg_replace('/<a[^>]*>(\w+)<\/a>/', '<h1>$1</h1>', $subject);
']' 将匹配除 '>' 以外的所有字符,'*' 表示它将匹配其前面出现的零个或多个字符,然后 '>' 将在其后,然后它将捕获 () 中的所有字符, '\w' 将匹配任何单词字符,+ 将匹配至少一个出现在它前面的字符,然后 '' 将出现(正斜杠需要转义)。
$subject 可以是整个 HTML 文档或只是您的字符串。
如果您的输入不重要,我不鼓励为此使用正则表达式。多行 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();