在Logstash中使用Ruby移除URL数组中的URL前缀问题
在Logstash里用Ruby移除URL数组的前缀
你的两种数组遍历写法(each加push、map)逻辑本身没毛病,问题确实出在gsub的正则上,核心是两个点:
- 正则没锚定字符串开头,万一URL中间出现类似
http://的片段,可能会误匹配 - 在Logstash配置语境中,Ruby字符串里的反斜杠得双重转义,不然会被Logstash的解析器提前转义,导致正则失效
修正后的代码
推荐用更简洁的map写法:
newUrlArray = urlArray.map{ |url| url.gsub(/^(https?:\/\/)?(www\.)?/, '') }
如果是写在Logstash的ruby filter块里,要注意配置里的字符串转义,完整示例如下:
filter { ruby { code => " urlArray = ['https://www.google.com','https://www.bcc.com'] newUrlArray = urlArray.map{ |url| url.gsub(/^(https?:\/\/)?(www\.)?/, '') } event.set('cleaned_urls', newUrlArray) " } }
正则说明
^:锚定字符串开头,保证只处理URL最前面的前缀,不会误碰中间内容(https?:\/\/)?:匹配可选的http/https协议头(s?表示s可选,\/\/是Ruby正则里对斜杠的转义)(www\.)?:匹配可选的www.前缀- 替换为空串后,就能得到去掉前缀的纯域名(比如
google.com、bcc.com)
最终效果
运行上述代码后,newUrlArray的内容为:
['google.com', 'bcc.com']
内容的提问来源于stack exchange,提问作者Mor
相关产品推荐
相关产品推荐

