我试图用正则表达式提取多个值,但我有点迷路了。
我应该在一个名为“value”(用于Grafana)的命名捕获组上获得结果我试图捕获字符串中的一个或多个变量,而不仅仅是找到的第一个值。
得到了这个,但不像预期的那样工作:
(?:\G(?!\A)|.*?\b{?\b)[^}]+?\b(?<value>(\d*?\S))\b
范例:
{"146":146,"547":547,"179":179,"79":79}
我的目标是得到这样的结果:
146, 547, 179, 79
任何Regex天才来帮助?Thanx
1条答案
按热度按时间6rvt4ljy1#
Grafana使用JavaScript正则表达式引擎作为变量。在代码内部如何处理它可以在这里看到。
为了在一个输入项上提供多个匹配,regex应该 Package 在
/ .. /g
中。更多关于正则表达式中的标志的信息,请点击这里。对于您的示例,表达式
/(?<="\d+":)(\d+)(?=[,}])/g
应该提供预期的结果。这里:(?<="\d+":)
检查匹配是否在匹配regex"\d+":
之前。如果数据中的实际键与问题示例中提供的键不同,请相应地更正此表达式。(\d+)
与实际数字匹配。由于这是唯一的捕获组,因此无需命名。(?=[,}])
检查match是否后跟,
或}
。演示here。
您自己的尝试失败,因为使用了JS引擎不支持的PCRE语法。