使用REGEX有条件地截断URL

时间:2019-07-16 09:25:17

标签: regex splunk

我正在从Splunk数据中提取基本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>.*)\/.*$"

因此,这非常适合包含参数的网址,上面的代码为base_url给出了“ www.google.com”。但是,如果我删除参数,则不会返回任何内容-例如base_url=""。因此,我需要先检查URL是否包含问号,如果是,请删除右边的所有内容,否则请不要执行任何操作。我一直在尝试无济于事,所以将不胜感激!

2 个答案:

答案 0 :(得分:1)

使用以下正则表达式:

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

我正在处理有关http / https的情况。然后延迟捕获所有非空白字符,直到遇到/?\n\r中的任何一个为止。

唯一的捕获组包含预期的基本URL。

Demo

答案 1 :(得分:0)

因此,对于任何有兴趣的人,解决方案都是对原始代码的很小的修改:

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

是“ |”在第一个“雷克斯字段”行的右括号后面。这将首先去除问号之后的所有内容,然后去除最后一个斜杠之后的所有内容。