regex:how 指定捕获结束

regex:how to specify and end of the capture

假设我收集了这样的原始数据

  ERROR -- : FluentLogger: Can't convert to msgpack: (blah: blah: balh:.... ):

我要捕捉

FluentLogger: Can't convert to msgpack:

目前我有这个

(?>ERROR -- :)(?<msg1>.*):

但问题在于它会捕获

FluentLogger: Can't convert to msgpack: (blah: blah: balh:.... ):

我将如何为此编写正则表达式?

使用这个正则表达式:/ERROR -- : ([A-Za-z]+:[\s\w']+):/g

Demo and explanation

你可以这样做:

(?<=ERROR -- : ).*msgpack:

请注意,这与您最初的尝试很接近:

(?>ERROR -- :)(?<msg1>.*):

但不完全是,因为您使用 ?> 进行后视,但它应该是 (?<=)。

一个或多个 'not :' 通过 ':' 使用

[^:]+:

在字符串中找到前两个

/[^:]+:[^:]+:/

在 ERROR -- : 之后捕获其中的前两个字符串

(?>ERROR -- :)(?[^:]+:[^:]+:)