我正在做一些正则表达式,它将在OpenTelemetry Collector内针对日志数据运行,其中我需要命名捕获组从日志中提取数据组。
我想遵守围绕流程的开放遥测语义约定。但这些语义约定要求使用“.”。作为分隔符 - 例如“process.command”、“process.executable.name”等。
这就是我遇到困难的地方...... RegEx101 似乎不喜欢有一个“。”在一个命名的捕获组中,根据我自己的经验,这是一个可靠的工具,所以我倾向于相信它。
有办法允许这样做吗?
正则表达式示例:
^(?P<process.executable.name>[^\[\]]+)\[?(?P<process.pid>\d+)?\]?$
带点的示例(不起作用):
请注意,用“\”转义点是行不通的 - 已经尝试过了。
为了证明正则表达式本身确实可以在没有断点的情况下工作,使用下划线而不是点:
正如您在 go 代码中看到的那样这里:
// isValidCaptureName reports whether name
// is a valid capture name: [A-Za-z0-9_]+.
// PCRE limits names to 32 bytes.
// Python rejects names starting with digits.
// We don't enforce either of those.
因此捕获名称中不允许使用点。
但是您可以使用类似
process_executable_name
的内容。