使用 REGEX 条件截断 URL

Conditional Truncation of a URL with REGEX

我正在建立一个从 Splunk 数据中提取的基础 URL 列表。 "base url" 的定义是忽略任何参数然后截断,以便保留最后一个斜杠左侧的所有内容。

不幸的是,并非所有 URL 都包含参数,我一直在研究如何在正则表达式中加入条件部分。这是我目前所拥有的:

| makeresults<br>
| eval url="www.google.com/search?q=best+something&rlz=1C1GCEA_enNL789NL790&oq=best+something&aqs=chrome..69i57j0l5.4104j0j8&sourceid=chrome&ie=UTF-8"<br>
| rex field=url "^(?<url1>[^\?]*)\?.*$"<br>
| rex field=url1 "^(?<base_url>.*)\/.*$"

所以这对于包含参数的 URL 非常有效,上面为 base_url 给出了 "www.google.com"。但是如果我删除参数,它 returns 什么都没有 - 例如base_url=""。所以我需要先检查 URL 是否包含问号,如果是,则删除右侧的所有内容,如果不是,则不执行任何操作。我一直在尝试无济于事,因此非常感谢您的帮助!

使用以下正则表达式:

^(?:https?:\/\/)?(\S*?)[\?\/\n\r]

我正在处理 http/https 存在的情况。然后延迟捕获所有 non-whitespace 个字符,直到遇到 /?\n\r 中的任何一个。

正如预期的那样,唯一的捕获组包含碱基 URL。

Demo

因此,对于任何感兴趣的人,解决方案是对原始代码进行相当小的修改:

    | makeresults
    | eval url="www.google.com/search?q=best+something"
    | rex field=url "^(?<url1>[^\?]*)|\?.*$"<br>
    | rex field=url1 "^(?<base_url>.*)\/.*$"

是“|”在第一个 "rex field" 行的右括号之后。这将首先删除问号后的所有内容,然后删除最后一个斜线后的所有内容。