我正在尝试在Grafana中创建变量,并从一个长字符串中获取两个值。 查询结果是:
ifHCInOctets{ifAlias="string1",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 22 on Unit 1",ifIndex="int2",ifName="0x3232"}
我需要在一个结果中获得string1和int2。 我尝试使用此正则表达式,但是在grafana中,我仅得到string1:
.*ifAlias="(.*?)",.*,ifIndex="([1-25][^"]*).*
更新:
目标是在图形标题中获取端口索引和ifAlias。原始数据是:
ifHCOutOctets{ifAlias="UPSTREAM",ifDescr="",ifIndex="4",ifName="4"} 9.3057114067485e+13
ifHCOutOctets{ifAlias="",ifDescr="",ifIndex="5",ifName="5"} 2.274143681e+09
ifHCOutOctets{ifAlias="",ifDescr="",ifIndex="6",ifName="6"} 7.002508461736e+12
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 10 on Unit 1",ifIndex="10",ifName="10"} 2.577610903151e+12
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 15 on Unit 1",ifIndex="15",ifName="15"} 4.854219613e+10
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 16 on Unit 1",ifIndex="16",ifName="16"} 4.96070449818e+11
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 17 on Unit 1",ifIndex="17",ifName="17"} 1.9350264954065e+13
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 18 on Unit 1",ifIndex="18",ifName="18"} 3.3384544298231e+13
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 19 on Unit 1",ifIndex="19",ifName="19"} 3.668765293115e+12
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 20 on Unit 1",ifIndex="20",ifName="20"} 1.60948251155615e+14
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 21 on Unit 1",ifIndex="21",ifName="21"} 1.3754296283244e+13
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 22 on Unit 1",ifIndex="22",ifName="22"} 1.7416985946384e+13
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 23 on Unit 1",ifIndex="23",ifName="23"} 4.4569373926096e+13
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 24 on Unit 1",ifIndex="24",ifName="24"} 1.339389886592e+12
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 26 on Unit 1",ifIndex="26",ifName="26"} 0
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 3 on Unit 1",ifIndex="3",ifName="3"} 1.3292564781714e+13
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 7 on Unit 1",ifIndex="7",ifName="7"} 3.27435396e+10
ifHCOutOctets{ifAlias="",ifDescr="D-Link DGS-3420-28TC R1.82.B00 Port 8 on Unit 1",ifIndex="8",ifName="8"} 1.9079625314e+10
答案 0 :(得分:0)
在这里看看:
ifAlias="([^"]+)",.*ifIndex="([^"]+)
https://regex101.com/r/1120hJ/1
您的ifIndex只是在寻找数字[1-25]
(应为[0-9]
),其中示例字符串还包含文本
答案 1 :(得分:0)
双引号后缺少int
。您也可以通过在双引号"([^"]*)"
之间使用否定的字符类来提高模式的效率。
匹配ifIndex="
时,您匹配的是右引号,但是模式中的右引号不匹配。
请注意,1-25匹配1、2或5。
.*?ifAlias="([^"]*)",.*,ifIndex="(int[1-25][^"]*)".*
如果您只想匹配1到25的数字,则可以忽略不匹配[^"]*
的否定字符类"
并匹配结尾的"
:
.*?ifAlias="([^"]*)",.*,ifIndex="(int(?:[0-2][0-5]|[1-9]))".*