正则表达式从URL中删除www

时间:2016-05-06 10:42:38

标签: regex logstash grok

我希望有人可以提供帮助,这让我发疯了!

我正在尝试修改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 个答案:

答案 0 :(得分:2)

您可以在第一个(?!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个链接。

ALTERNATIVE

\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\.)前瞻只会让您跳过协议和网址的www部分。

答案 1 :(得分:0)

如果网址以www开头,则会与www后的部分匹配。

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

我通过在子域中使用-的否定前瞻来简化了正则表达式的其余部分。