我正在从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是否包含问号,如果是,请删除右边的所有内容,否则请不要执行任何操作。我一直在尝试无济于事,所以将不胜感激!
答案 0 :(得分:1)
使用以下正则表达式:
^(?:https?:\/\/)?(\S*?)[\?\/\n\r]
我正在处理有关http / https的情况。然后延迟捕获所有非空白字符,直到遇到/
,?
,\n
或\r
中的任何一个为止。
唯一的捕获组包含预期的基本URL。
答案 1 :(得分:0)
因此,对于任何有兴趣的人,解决方案都是对原始代码的很小的修改:
| makeresults
| eval url="www.google.com/search?q=best+something"
| rex field=url "^(?<url1>[^\?]*)|\?.*$"<br>
| rex field=url1 "^(?<base_url>.*)\/.*$"
是“ |”在第一个“雷克斯字段”行的右括号后面。这将首先去除问号之后的所有内容,然后去除最后一个斜杠之后的所有内容。