为了账号安全,请及时绑定邮箱和手机立即绑定

流集中的正则表达式

流集中的正则表达式

呼啦一阵风 2021-10-28 14:24:38
我想使用 Streamsets 破坏日志文件。日志就像,Deny tcp src dmz:77.77.77.7/61112 dst dmz:55.55.56.57/139 by access-group "outside_access_in" [0x8b3ecfdc, 0x0]日志中可能还有 2 个以上的 IP,我正在尝试从我的日志中捕获唯一的第一个和第二个 IP 地址。据记载,Streamsets 使用 Java REGEX 模式。到目前为止,我在 Streamsets 的 Expression Evaluator 处理器中所做的是,${str:regExCapture(record:value('/Message'),'(\\d+[.]\\d+[.]\\d+[.]\\d+/?\\d*)', 1)}知道如何捕获第二个 IP 吗?
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

您可以使用

${str:regExCapture(record:value('/Message'),'^(?:.*?(\\d+(?:[.]\\d+){3}(?:/\\d+)?)){2}', 1)}

请参阅正则表达式演示。

细节

  • ^ - 字符串的开始

  • (?:.*?(\\d+(?:[.]\\d+){3}(?:/\\d+)?)){2} - 连续两次出现

    • \\d+ - 1+ 位数字

    • (?:[.]\\d+){3}- 出现 3 次.和 1+ 位数字

    • (?:/\\d+)?-/和 1+ 数字的可选序列。

    • .*? - 除换行符以外的任何 0+ 个字符,尽可能少

    • (\\d+(?:[.]\\d+){3}(?:/\\d+)?)- 捕获组 1(它的值将被返回,str:regExCapture因为最后一个参数被设置为1):

由于在一次匹配操作中捕获多次出现时,组中的内容会被重写,因此组 1 将仅包含第二个 IP 值。

请注意,更好(更安全、更精确)的 IP 模式是(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3},请参阅使用正则表达式从字符串中提取 ip 地址。所以,你也可以把命令写成

 ${str:regExCapture(record:value('/Message'),'^(?:.*?\\b((?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}(?:/\\d+)?)){2}', 1)}

请参阅另一个正则表达式演示。


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信