代码之家  ›  专栏  ›  技术社区  ›  josh

Regex从URL中删除www

  •  2
  • josh  · 技术社区  · 8 年前

    我希望有人能帮我,这快把我逼疯了!

    我正在尝试修改Logstash Grok过滤器以解析域名。 当前正则表达式为: \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b) 并正确分隔域,但是,我需要添加额外的检查以删除 www. .

    这就是我到目前为止得出的结论:

    \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(^(?<!www$).*$?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
    

    我似乎只能保留 网址:www。 域的一部分,而不是域本身。 我需要实现的目标示例: www.stackoverflow.com 应该是 stackoverflow.com .

    我需要特别删除 网址:www。 而不是整个子域。

    提前谢谢你!

    更新

    预期产出的输入示例(以本帖子为例): 在当前状态下: https://stackoverflow.com/questions/37070358/ 收益 网址:www.stackoverflow.com

    我需要的是它回来 stackoverflow.com网站

    2 回复  |  直到 8 年前
        1
  •  3
  •   Wiktor Stribiżew    8 年前

    您可以添加 (?!www\.) (?!http:\/\/www\.) 第一次之后就出现负面展望 \b 排除匹配 www. http://www. :

    \b(?!www\.)(?!http:\/\/www\.)(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(?:\.?|\b)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    请参阅 regex demo

    您可以添加更多要排除的负面标题 https:// ftp / ftps 链接。

    替代方案 :

    \b(?!(?:https?|ftps?):\/\/)(?!www\.)(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(?:\.?|\b)
    

    看见 this regex demo

    这个 (?!(?:https?|ftps?):\/\/) (?!www.) lookaheads只会让你跳过协议 www URL的部分。

        2
  •  0
  •   Bohemian    8 年前

    这将与以下部件匹配 www 如果url以开头 网址 .

    (?!www\.)\b(?:(?!-)[0-9A-Za-z]{1,63})(?:\.(?:(?!-)[0-9A-Za-z-]{1,63}))*(\.?|\b)
    

    我也简化了其余的正则表达式,对 - 在子域中。