【发布时间】:2021-03-08 14:00:55
【问题描述】:
我们的机器名称的结构类似于 - 例如“S01-邮件-M01”。我希望能够将“S01”、“MAIL”、“M01”捕获为 $1、$2、$3,但我无法使用正则表达式,我真的没有使用它们的经验。
我正在测试 /(.*)\-+/ 之类的东西,但是当我在 https://regex101.com/ 上测试时,这会捕获“S01-MAIL”
我在 Prometheus 配置脚本中执行此操作,所以像 Split 这样明显的编程工具不可用,只有正则表达式。
【问题讨论】:
-
如果支持,您可以使用 3 个捕获组
^(\w+)-(\w+)-(\w+)$或^([^-]+)-([^-]+)-([^-]+)$regex101.com/r/UU3eLk/1 -
这可以推广到 N 个组而不是硬编码为 3 个吗?
-
我认为 prometheus 使用 re2 引擎进行正则表达式。如果您想按编号访问单独的组,则必须指定所有 3 个。
-
您最多查看多少组?如果您愿意,可以创建可选的捕获组,如
^(\w+)(?:-(\w+))?(?:-(\w+))?$并在需要时对其进行扩展。
标签: regex prometheus