首页 > 解决方案 > 提取最后 2 个字段,无论大小

问题描述

我一直在尝试获取以下字符串的最后“两个字段”:

cc-api-data.bar.bar
external-atl3-1.xx.fbcdn.net
fbcdn.net

对于前 2 个字符串,我只想获得“bar.bar”和“fbcdn.net”。但是,对于最后一个字符串,我希望它匹配整个内容,因为它拥有我想要的一切。

我非常有信心我可以在一个简单的脚本中做到这一点,但在这种情况下我正在尝试使用正则表达式。我只能在最后一个字符串上得到字符串的最后一部分,而不是全部。而且我无法告诉正则表达式采用哪个字段。我真的只想要最后两个字段,不管有多少分隔符。

任何建议,甚至有可能

标签: regexsplunk

解决方案


我的猜测是,我们可能想要一个具有$类似于以下锚点的表达式:

([^.]*)\.([^.]*)$

朝向我们琴弦的右侧。

请参阅演示以获取更多说明

我想知道正则表达式如何知道只得到最后一个时期之前的部分。是不是因为它抓住了任何不是“。”的字符 因为它在行尾?为什么它不能抓住第一个八位字节?

好问题,也有点难以解释,通过播放这个演示,我们可以观看比赛前的许多步骤:

正则表达式的步骤

它会逐个字符地开始并针对我们的表达式进行测试,它会通过表达式中的规则,但是在早期的 chars 或 octet中,一旦它到达$结束锚点,那些早期的 chars 或 octet就会失败,因为我们的最后一个结束的字符串规则已被打破。


推荐阅读