PHP正则表达式删除HTML文档中的标签

时间:2009-09-01 22:32:19

标签: php regex preg-replace html-parsing

说我有以下文字

..(content).............
<A HREF="http://foo.com/content" >blah blah blah </A>
...(continue content)...

我想删除链接,我想删除标记(同时保留文本)。如何使用正则表达式执行此操作(因为URL将全部不同)

非常感谢

8 个答案:

答案 0 :(得分:16)

尽可能避免使用正则表达式,especially when processing xml。在这种情况下,您可以使用strip_tags()simplexml,具体取决于您的字符串。

答案 1 :(得分:15)

这将删除所有标签:

preg_replace("/<.*?>/", "", $string);

这将只删除<a>标记:

preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $string);

答案 2 :(得分:4)

<?php
//example to extract the innerText from all anchors in a string
include('simple_html_dom.php');

$html = str_get_html('<A HREF="http://foo.com/content" >blah blah blah </A><A HREF="http://foo.com/content" >blah blah blah </A>');

//print the text of each anchor    
foreach($html->find('a') as $e) {
    echo $e->innerText;
}
?>

请参阅PHP Simple DOM Parser

答案 3 :(得分:3)

不漂亮,但做的工作是:

$data = str_replace('</a>', '', $data);
$data = preg_replace('/<a[^>]+href[^>]+>/', '', $data);

答案 4 :(得分:1)

strip_tags()也可以使用。

请参阅示例here

答案 5 :(得分:0)

我用它来用文本字符串替换锚点......

function replaceAnchorsWithText($data) {
        $regex  = '/(<a\s*'; // Start of anchor tag
        $regex .= '(.*?)\s*'; // Any attributes or spaces that may or may not exist
        $regex .= 'href=[\'"]+?\s*(?P<link>\S+)\s*[\'"]+?'; // Grab the link
        $regex .= '\s*(.*?)\s*>\s*'; // Any attributes or spaces that may or may not exist before closing tag
        $regex .= '(?P<name>\S+)'; // Grab the name
        $regex .= '\s*<\/a>)/i'; // Any number of spaces between the closing anchor tag (case insensitive)

        if (is_array($data)) {
            // This is what will replace the link (modify to you liking)
            $data = "{$data['name']}({$data['link']})";
        }
        return preg_replace_callback($regex, array('self', 'replaceAnchorsWithText'), $data);
    }

答案 6 :(得分:0)

$pattern = '/href="([^"]*)"/';

答案 7 :(得分:-2)

使用str_replace