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

时间:2014-09-18 05:21:03

标签: php regex loops hyperlink

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

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

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

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

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

但是还没有找到一种方法来实际替换最后一个/

之后的所有内容

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

使用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);

我也做了live demo