Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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-循环所有链接,在最后一次出现后删除内容_Php_Regex_Loops_Hyperlink - Fatal编程技术网

PHP-循环所有链接,在最后一次出现后删除内容

PHP-循环所有链接,在最后一次出现后删除内容,php,regex,loops,hyperlink,Php,Regex,Loops,Hyperlink,我有一个变量,它包含一整篇文章,包括文本和一些链接 我需要循环遍历变量中的内容,并找到包含特定单词的链接的所有实例。一旦找到它们,我就需要删除每个找到的URL中最后一个/之后的所有内容 例如: 假设该页面有8个链接,其中4个包含“文章”一词。 我需要找到每个包含“article”一词的链接,然后在每个链接最后一次出现后删除所有内容 到目前为止,我已经尝试使用一些正则表达式,例如: /<a.*?href\s*=\s*["\']([^"\'>]*article[^"\'>]

我有一个变量,它包含一整篇文章,包括文本和一些链接

我需要循环遍历变量中的内容,并找到包含特定单词的链接的所有实例。一旦找到它们,我就需要删除每个找到的URL中最后一个/之后的所有内容

例如: 假设该页面有8个链接,其中4个包含“文章”一词。 我需要找到每个包含“article”一词的链接,然后在每个链接最后一次出现后删除所有内容

到目前为止,我已经尝试使用一些正则表达式,例如:

    /<a.*?href\s*=\s*["\']([^"\'>]*article[^"\'>]*)["\'][^>]*>.*?<\/a>/si
/]*)[“\'][^>]*>。?/si
但是没有找到一种方法来真正替换上一次之后的所有东西/


关于如何实现这一点有什么想法吗?

使用DOM工具意味着您更关心您的CPU。我并不是说完全用于文本处理的RegEx不是提供解决方案的合适工具,但好吧,用于特定工作的特定工具总是几乎更干净,而且性能更好

根据您已经说过的内容,我以以下方式修改了您的正则表达式:

(<a(?>.+?)href\s*=\s*(["'])(?>[^"'><]*?article)(?>[^>]*?/))(.*?)(\2.*?>[^<]++</a>)

(还有。

文章是动态的,因此链接和内容从来都不一样。它们从数据库中检索并存储在一个变量中。HTML标记已经包含在内。这是DOM而不是regex的工作。即使内容还不在页面上?这是从MySQL数据库检索的内容,需要这些内容在页面上输出之前所做的更改。
echo preg_replace('~(<a(?>.+?)href\s*=\s*(["\'])(?>[^"\'><]*?article)(?>[^>]*?/))(.*?)(\2.*?>[^<]++</a>)~s', '\1\4', $html);