我需要从某些文本中删除锚标记,并且似乎无法使用正则表达式执行此操作
只是锚标签,而不是它们的内容
例如,<a href="http://www.google.com/" target="_blank">google</a>
将成为google
。
答案 0 :(得分:13)
确切地说,使用正则表达式无法正确完成。
以下是使用DOM的示例:
$xml = new DOMDocument();
$xml->loadHTML($html);
$links = $xml->getElementsByTagName('a');
//Loop through each <a> tags and replace them by their text content
for ($i = $links->length - 1; $i >= 0; $i--) {
$linkNode = $links->item($i);
$lnkText = $linkNode->textContent;
$newTxtNode = $xml->createTextNode($lnkText);
$linkNode->parentNode->replaceChild($newTxtNode, $linkNode);
}
每当对DOM进行更改时,向后循环都很重要。
答案 1 :(得分:10)
答案 2 :(得分:6)
您正在寻找strip_tags()
。
<?php
// outputs 'google'
echo strip_tags('<a href="http://www.google.com/" target="_blank">google</a>');
答案 3 :(得分:5)
这个问题已经回答了,但我想我会在混合中添加我的解决方案。我比接受的解决方案更喜欢这个,因为它更加重要。
$content =
preg_replace(array('"<a href(.*?)>"', '"</a>"'), array('',''), $content);
答案 4 :(得分:4)
使用正则表达式:
preg_replace('/<a[^>]+>([^<]+)<\/a>/i','\1',$html);
答案 5 :(得分:0)
尝试使用:
$str = '<p>paragraph</p><a href="http://www.google.com/" target="_blank" title="<>">google -> foo</a><div>In the div</div>';
// first, extract anchor tag
preg_match("~<a .*?</a>~", $str, $match);
// then strip the HTML tags
echo strip_tags($match[0]),"\n";
<强>输出:强>
google -> foo
答案 6 :(得分:0)
这里的大部分正则表达都没有帮助我。其中一些删除了锚内的内容(这完全不是OP要求的内容)而不是所有的内容,其中一些内容将匹配任何以a开头的标记等。
这是我为工作需要而创造的。我们遇到一个问题,即将HTML传递给wkhtmltopdf,其中包含锚标签(具有许多数据属性和其他属性)有时会阻止PDF生成,因此我希望在保留文本的同时删除它们。
正则表达式:
/&lt; /?a([^&gt;] *)?&gt; / ig
在PHP中你可以这样做:
$text = "<a href='http://www.google.com/'>Google1</a><br>" .
"<a>Google2</a><br>" .
"<afaketag href='http://www.google.com'>Google2</afaketag><br>" .
"<afaketag>Google4</afaketag><br>" .
"<a href='http://www.google.com'><img src='someimage.jpg'></a>";
echo preg_replace("/<\/?a( [^>]*)?>/i", "", $text);
输出:
Google1<br>Google2<br><afaketag href='http://www.google.com'>Google2</afaketag><br><afaketag>Google4</afaketag><br><img src='someimage.jpg'>