Пытаюсь собрать плагин для vBulletin для фильтрации ссылок на файлообменники. Но, как я уверен, вы часто слышите, я новичок в php, не говоря уже о регулярных выражениях.
По сути, я пытаюсь составить регулярное выражение и использовать preg_replace, чтобы найти любые URL-адреса из этих доменов и заменить всю ссылку сообщением о том, что они не разрешены. Я бы хотел, чтобы он нашел ссылку, будь то гиперссылка, опубликованная в виде обычного текста или заключенная в теги [CODE] bb.
Что касается регулярного выражения, мне нужно было бы найти URL-адреса со следующим, я думаю:
- Начинается с http или тега привязки. Я считаю, что URL-адреса в тегах [CODE] могут обрабатываться так же, как и обычные текстовые URL-адреса, и это нормально, если замена впоследствии оказывается внутри тега [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 (хотя я немного почитал и собираюсь продолжить).
Спасибо.