【问题标题】:Can't seem to find a solid regex for a URL spam remover似乎找不到 URL 垃圾邮件删除器的可靠正则表达式
【发布时间】:2012-07-20 21:23:35
【问题描述】:

我似乎找不到任何像样的简单正则表达式来删除垃圾邮件链接。我正在尝试的一个作品,但前提是 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;

所以,我想知道的是,如果代码看起来正确,是否有人有更好的正则表达式可供我使用?

【问题讨论】:

  • 您要删除 any 链接吗?或者是否有一个特殊的规则来确定哪些链接是垃圾链接,哪些链接是火腿?
  • 您的正则表达式当前仅在链接位于文件末尾时才找到链接(因为 $ 锚点)。此外,您最好不要使用^ 作为正则表达式分隔符,因为这是正则表达式中的重要元字符。如果您不想使用标准的/,最好使用~%
  • 是的,我想删除任何链接,我的表单上不允许出现任何链接。
  • 哦,谢谢蒂姆!它现在完美运行。你是上帝!
  • 小心,正则表达式不会找到大量有效链接。

标签: regex url preg-replace


【解决方案1】:

蒂姆回答了我的问题。他写道:

您的正则表达式目前仅在文件末尾找到链接(因为 $ 锚)。此外,您最好不要使用 ^ 作为正则表达式分隔符,因为这是正则表达式中的一个重要元字符。如果您不想使用标准,最好使用 ~ 或 % /

【讨论】:

    【解决方案2】:

    它是 impossible to detect all links 在文本中可靠。特别是如果您想查找没有协议的链接(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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-23
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多