我知道已经提出了几个类似的问题。但无法使用正则表达式解决此问题。
在我有标题
的任何帖子中<h1><a href="#hello">link text</a>Title with header tag </h1>
<h2><a href="http://so.com">link text</a>Title with header tag</h2>
我尝试使用锚标记链接和文本从标记标记中删除锚标记。但不是标题标题。
这是我的正则表达式,它也删除了我的标题文本。
(<h[1-2].*?>)<a.*?>
并且
(<h([1-6])[^>]*>)\s?<a>(.*)?<\/a>\s?(<\/h\2>)
这是 URL
我的最终结果将是。
<h1>Title with header tag </h1>
<h2>Title with header tag</h2>
答案 0 :(得分:1)
DOM
方式为您的字符串设置DOMDocument
对象,并为您的链接使用xpath对象。这些将在之后删除。
<?php
$html = <<<DATA
<body>
<h1><a href="#hello">link text</a>Title with header tag </h1>
<h2><a href="http://so.com">link text</a>Title with header tag</h2>
</body>
DATA;
$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DomXPath($dom);
$links = $xpath->query("//a[parent::h1|parent::h2]");
foreach ($links as $link) {
$link->parentNode->removeChild($link);
}
echo $dom->saveHTML();
?>
不要为所有事情使用正则表达式。
答案 1 :(得分:0)
这是一个正则表达式,它将为您提供特定的"hello"
:
(?<=<h[12]><a href="#)[^"]*
<h[12]><a Search for a <a> tag inside of a <h1> or a <h2>...
href="# ... that has a href attribute starting with a hash
(?<= ) If a string matches that...
[^"]* ... then take all that follows until the closing quotes
为了删除锚点,以下正则表达式将为您提供全部href
属性:
(?<=<h[12]><a) *href="#.*"
<h[12]><a Search a <a> tag inside of a header tag
(?<= ) If a string matches that...
* ... take all the spaces...
href="# ... then the href attribute, the opening quotes, and the hash...
.* ... then whatever...
" ... until the closing quotes
您可以使用以下正则表达式删除完整的<a>
标记:
(?<=<h[12]>)<a *href="#.*".*>
然后使用这个简单的正则表达式删除结束标记:
</a>
Here是phplivergex.com的链接,您可以在其中查看替换结果。