我正在尝试为 vBulletin 组合一个插件,以过滤掉指向文件共享站点的链接。但是,我相信你经常听到,我是 php 的新手,更不用说正则表达式了。
基本上,我正在尝试组合一个正则表达式并使用 preg_replace 来查找来自这些域的任何 url,并将整个链接替换为不允许它们的消息。我希望它能够找到链接,无论它是超链接的、作为纯文本发布的还是包含在 [CODE] bb 标签中的。
至于正则表达式,我认为我需要它来查找具有以下内容的 URLS:
- 以 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 链接的任何建议(尽管我已经阅读了一些内容,我将继续)。
谢谢。