PHP-循环浏览所有链接,删除上次出现的内容


PHP - Loop through all links, remove content after last occurance

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

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

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

到目前为止,我已经尝试使用一些Regex,例如:

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

但还没有找到一种方法来真正取代上一次/之后的所有东西

关于如何做到这一点,有什么想法吗?

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

根据你已经说过的,我以这种方式修改了你的正则表达式:

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

你只需要用第1组和第4组捕获的组替换一场完整的比赛。所以代码是:

echo preg_replace('~(<a(?>.+?)href's*='s*(["''])(?>[^"''><]*?article)(?>[^>]*?/))(.*?)('2.*?>[^<]++</a>)~s', ''1'4', $html);

我也做了一个现场演示。