【发布时间】:2009-12-09 10:16:38
【问题描述】:
我正在尝试为 vBulletin 制作一个插件,以过滤掉指向文件共享站点的链接。但是,我相信你经常听到,我是 php 的新手,更不用说正则表达式了。
基本上,我正在尝试组合一个正则表达式并使用 preg_replace 来查找来自这些域的任何 url,并将整个链接替换为不允许它们的消息。我希望它能够找到链接,无论它是超链接的、以纯文本形式发布的还是包含在 [CODE] bb 标签中的。
至于正则表达式,我认为我需要它来查找具有以下内容的 URL:
- 以 http 或锚标记开头。我相信 [CODE] 标签中的 URLS 可以像纯文本 URLS 一样被处理,如果之后替换结束在 [CODE] 标签内就可以了。
- 在域/单词之前可以包含任意数量的任意字符
- 域位于中间位置
- 域后可以包含任意数量的任意字符
- 以多个扩展名结尾,例如 (html|htm|rar|zip|001) 或结束锚标记。
我有一种感觉,是数字 2 和 4 让我感到困惑(如果不是更多的话)。我在这里发现了一个类似的问题,并试图将代码分开一点(即使我并不真正理解它)。我现在有了这个我认为可能有用的东西,但它没有:
<?php
$filterthese = array('domain1', 'domain2', 'domain3');
$replacement = 'LINKS HAVE BEEN FILTERED MESSAGE';
$regex = array('!^http+([a-z0-9-]+\.)*$filterthese+([a-z0-9-]+\.)*(html|htm|rar|zip|001)$!',
'!^<a+([a-z0-9-]+\.)*$filterthese+([a-z0-9-]+\.)*</a>$!');
$this->post['message'] = preg_replace($regex, $replacement, $this->post['message']);
?>
我觉得我离这里很远,我承认我并不完全了解 php,更不用说正则表达式了。我愿意接受有关如何更好地做到这一点,如何使其工作或指向 RTM 的任何建议(尽管我已经阅读了一些内容,我将继续)。
谢谢。
【问题讨论】:
标签: php regex preg-replace