如何删除PHP中的标签之间的文本?

时间:2009-09-01 11:15:22

标签: php regex string

尽管多年来一直使用PHP,但我从未真正学过如何使用表达式来正确地截断字符串...现在正在背后咬我!

任何人都可以帮我截断这个吗?我需要从网址中删除文本部分,然后转动

<a href="link.html">text</a>

<a href="link.html"></a>

6 个答案:

答案 0 :(得分:31)

$str = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $str)

答案 1 :(得分:13)

使用SimpleHTMLDom

<?php
// example of how to modify anchor innerText
include('simple_html_dom.php');

// get DOM from URL or file
$html = file_get_html('http://www.example.com/');

//set innerText to null for each anchor
foreach($html->find('a') as $e) {
    $e->innerText = null;
}

// dump contents
echo $html;
?>

答案 2 :(得分:7)

考虑到您可能希望将其与其他href重复使用,这样的事情怎么样:

$str = '<a href="link.html">text</a>';
$result = preg_replace('#(<a[^>]*>).*?(</a>)#', '$1$2', $str);
var_dump($result);

哪能得到你:

string '<a href="link.html"></a>' (length=24)

(我考虑你在OP中输错了?)


如果您不需要匹配任何其他href,您可以使用类似:

$str = '<a href="link.html">text</a>';
$result = preg_replace('#(<a href="link.html">).*?(</a>)#', '$1$2', $str);
var_dump($result);

哪个也能帮到你:

string '<a href="link.html"></a>' (length=24)


作为旁注:对于更复杂的HTML,不要尝试使用正则表达式:它们适用于这种简单的情况,但对于真实的HTML部分,它们通常没有帮助,一般来说:HTML不是完全“正常”“足够”被正则表达式解析。

答案 3 :(得分:1)

您可以将子字符串与stringpos结合使用,尽管事实并非如此 一个非常好的方法。

检查:PHP Manual - String functions

另一种方法是编写符合条件的正则表达式。 但是为了快速解决你的问题,字符串函数会做...

编辑:我低估了观众。 ;)继续使用正则表达式... ^^

答案 4 :(得分:1)

仅使用strip_tags(),它会删除标签并在它们之间只留下所需的文字

答案 5 :(得分:0)

您无需自行捕获标记。只需将标记定位在标记之间,然后将其替换为空字符串即可。超级简单。

代码:(Demo

$string='<a href="link.html">text</a>';
echo preg_replace('/<a[^>]*>\K[^<]*/','',$string);
// the opening tag--^^^^^^^^  ^^^^^-match everything before the end tag
//                          ^^-restart fullstring match

输出:

<a href="link.html"></a>

或者在链接文字包含<的边缘情况下,请使用:~<a[^>]*>\K.*?(?=</a>)~

这避免了使用延迟量词,全字符串重新启动\K和“前瞻”的捕获组的费用。