尽管使用PHP多年,我从来没有真正学会如何使用表达式正确地截断字符串...现在正在咬我的背面!
任何人都可以给我一些帮助截断这个吗?我需要从网址中删除文本部分,然后转动
<a href="link.html">text</a>
成
<a href="link.html"></a>
$str = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $str)
<?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;
?>
考虑到你可能想与其他href
s重复使用它,这样的事情怎么样:
$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不是完全“正常”“足够”被正则表达式解析。
只使用strip_tags()
,它将摆脱标签并在它们之间只留下所需的文本
您可以将子字符串与字符串结合使用,即使这不是一个非常好的方法。
检查:PHP Manual - String functions
另一种方法是编写符合条件的正则表达式。但为了快速解决您的问题,字符串函数将...
编辑:我低估了观众。 ;)继续使用正则表达式... ^^
您不需要自己捕获标记。只需将标记定位在标记之间,然后将其替换为空字符串即可。超级简单。
代码:(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
和“前瞻”的捕获组的费用。