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