使用 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。
因此,对于任何感兴趣的人,解决方案是对原始代码进行相当小的修改:
| makeresults
| eval url="www.google.com/search?q=best+something"
| rex field=url "^(?<url1>[^\?]*)|\?.*$"<br>
| rex field=url1 "^(?<base_url>.*)\/.*$"
是“|”在第一个 "rex field" 行的右括号之后。这将首先删除问号后的所有内容,然后删除最后一个斜线后的所有内容。
我正在建立一个从 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。
因此,对于任何感兴趣的人,解决方案是对原始代码进行相当小的修改:
| makeresults
| eval url="www.google.com/search?q=best+something"
| rex field=url "^(?<url1>[^\?]*)|\?.*$"<br>
| rex field=url1 "^(?<base_url>.*)\/.*$"
是“|”在第一个 "rex field" 行的右括号之后。这将首先删除问号后的所有内容,然后删除最后一个斜线后的所有内容。