ファイル共有サイトへのリンクを除外する vBulletin のプラグインをまとめようとしています。しかし、よく耳にするように、私は正規表現はおろか、php の初心者でもあります。
基本的に、正規表現をまとめて preg_replace を使用して、これらのドメインからの URL を見つけ、リンク全体を許可されていないというメッセージに置き換えようとしています。ハイパーリンクされているか、プレーンテキストとして投稿されているか、[CODE] bb タグで囲まれているかに関係なく、リンクを見つけてほしいと思います。
正規表現に関しては、次の URL を見つけるために必要になると思います。
- http またはアンカータグで始まります。[CODE] タグ内の URL は、プレーン テキストの URL と同じように処理できると思います。その後、置換が [CODE] タグ内で終了しても問題ありません。
- ドメイン/単語の前に任意の数の任意の文字を含めることができます
- 中間のどこかにドメインがあります
- ドメインの後に任意の数の任意の文字を含めることができます
- (html|htm|rar|zip|001) などのいくつかの拡張子または終了アンカー タグで終了します。
私をつまずかせているのは2番と4番だと感じています(それ以上ではないにしても)。here で同様の質問を見つけて、コードを少し分解しようとしました(実際には理解していませんでしたが)。私は今、うまくいくかもしれないと思っていたこれを持っていますが、うまくいきません:
<?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 へのリンクに関する提案をお待ちしています (ただし、少し読んだので続けます)。
ありがとう。