Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP剥离整个html链接(包括文本)_Php_Regex - Fatal编程技术网

用PHP剥离整个html链接(包括文本)

用PHP剥离整个html链接(包括文本),php,regex,Php,Regex,我有一个文本集合,我正试图用PHP动态处理它(数据来自XML文件),但是我想去掉a链接和链接的文本 PHP的strip_标记去掉和,但不去掉中间的文本 我目前正在尝试使用Regexpreg_replace(“#()*?())”、“$content”) 另一件需要注意的事情是链接有样式、类、href和标题 有人知道解决方案吗?因为a元素不是在线元素,可能会破坏您的页面,所以您最好使用白名单方法,例如使用regex,但未经过彻底测试 echo preg_replace('#(<a.*?>

我有一个文本集合,我正试图用PHP动态处理它(数据来自XML文件),但是我想去掉a链接和链接的文本

PHP的strip_标记去掉
,但不去掉中间的文本

我目前正在尝试使用Regex
preg_replace(“#()*?())”、“$content”)

另一件需要注意的事情是链接有样式、类、href和标题


有人知道解决方案吗?

因为a元素不是在线元素,可能会破坏您的页面,所以您最好使用白名单方法,例如使用regex,但未经过彻底测试

echo preg_replace('#(<a.*?>)(.*?)(<\/a>)#','$2', $str);
echo preg_replace('#()(.*)()#','$2',$str);
另外,设置为-1的
limit
参数将其设置为no limit。

您可以使用,例如(未测试!):

试试这个:

$content=preg_replace('/<a[^>]*>(.*)<\/a>/iU','',$content);
$content=preg_replace('/]*>(.*)/iU',''.$content);
我使用了作为评论发布的解决方案,它们似乎效果最好,正是我想要的


“作为参考,您对锚定标记进行了分组,但没有对内容进行分组,这就是问题所在。preg_replace将替换分组的元素(包括在括号中的元素)。您可以尝试以下操作:
(]*?>*?>。?)#i
(i标志用于不区分大小写的比较)–Brad Christie”


“简单测试了较短的正则表达式版本,只是为了好玩:)
preg_replace('/]*>/','$data);
”–昨天的Cyber Guard设计

对不起,我真的不知道你的意思…?我不知道你到底想要什么,但通常你应该指定哪些标签是允许的,哪些是不允许的。如果由于安全问题而要删除标记,请考虑iframe、img或link.(related)作为参考,您已经对锚标记进行了分组,但没有对内容进行分组,这就是问题所在。preg_replace替换分组元素(括号中包含的元素)。不过,您可以尝试以下操作:
#(]*?>.*)i
(i标记用于不区分大小写的比较)经过简短测试的较短正则表达式版本,只是为了好玩:)
preg\u replace('/]*>/','$data)@Cyber Guard设计-我不认为它过于复杂。它肯定比正则表达式更可靠。太棒了!现在我明白了学好正则表达式的原因了!我如何剥离标签,但不剥离带有“
$html = file_get_html('http://www.example.com/');
foreach($html->find('a') as $element) { 
   $element->outertext = '';
}
$html->save('output.html');
$content=preg_replace('/<a[^>]*>(.*)<\/a>/iU','',$content);