正则表达式不匹配字符串中的确切单词

时间:2021-05-11 20:43:16

标签: regex

我有以下字符串:

group.cluster.namespace.release.app.pod.timer.grpc.server.processing.duration.package.method.error.count

和一个正则表达式:

(?:[^.]+\.){11}([^.]+)\.([^.]+)\.([^.]+)\.(?:[^.]+)

那个produces a match

Group 1: package
Group 2: method
Group 3: error

现在当第 3 组是 okcancelled 时,我想不匹配。我尝试了负面预测,但没有奏效。

(?:[^.]+\.){11}([^.]+)\.([^.]+)\.(?!ok|cancelled)\.(?:[^.]+)

上面的正则表达式有什么问题?

1 个答案:

答案 0 :(得分:4)

在负前瞻模式中,您必须再次匹配组中除点以外的任何字符。

我还建议使用 wordboundaries 来防止部分匹配,并且可能添加一个锚点 ^ 来断言字符串的开头。

请注意,否定字符类 [^.]+ 也可以跨换行符匹配。您可以使用 [^.\r\n]+

排除换行符
(?:[^.]+\.){11}([^.]+)\.([^.]+)\.(?!ok\b|cancelled\b)([^.]+)\.(?:[^.]+)

看到一个 regex demo

相关问题