4

我似乎找不到任何体面的简单正则表达式来删除垃圾邮件链接。我正在尝试的一个作品,但前提是 www.example.com 旁边没有句号和另一个句子。我有一本关于正则表达式的好书,但根本没有时间在 atm 学习它。

这是我正在使用的正则表达式。老实说,我不确定我是否做得对。

        $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 回答