4

スパム リンクを削除するためのまともな単純な正規表現が見つからないようです。私が試しているものは機能しますが、www.example.com にピリオドとその横に別の文がない場合に限ります。私は正規表現に関する優れた本を持っていますが、すべてを学ぶ時間はありません。

これが私が使用している正規表現です。正直なところ、これを正しく行っているかどうかはわかりません。

        $a = $_POST['msge'];
    $b = preg_replace('^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$^', '[LINK REMOVED]', $a);
    print $b;

それで、私が疑問に思っていたのは、コードが正しく見える場合、私が使用できるより良い正規表現を誰かが持っているかということでした.

4

2 に答える 2

0

ティムは私の質問に答えました。彼が書きました:

正規表現は現在、リンクがファイルの最後にある場合にのみリンクを検出します ($ アンカーのため)。また、^ は正規表現の重要なメタ文字であるため、正規表現の区切り記号として使用しないことをお勧めします。標準の / を使用したくない場合は ~ または % を使用することをお勧めします

于 2012-07-22T09:26:18.907 に答える
0

テキスト内のすべてのリンクを確実に検出することは不可能です。特に、プロトコルなしでリンクを見つけたい場合(bit.ly/fooなど)。

より多くの (すべてではない) リンクを見つけることができます

$result = preg_replace(
    '/\b
    (?:
     (?:https?|ftp|file):\/\/  # protocol (optional)
     |www\.|ftp\.|bit\.        # add more typical "link starters" here
    )
    [-A-Z0-9+&@#\/%=~_|$?!:,.]*
    [A-Z0-9+&@#\/%=~_|$]
    /ix', 
    '[LINK REMOVED]', $subject);
于 2012-07-22T09:38:01.047 に答える