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
你可以这样做:
请注意,这与您最初的尝试很接近:
(?>ERROR -- :)(?<msg1>.*):
但不完全是,因为您使用 ?>
进行后视,但它应该是 (?<=
)。
一个或多个 'not :' 通过 ':' 使用
[^:]+:
在字符串中找到前两个
/[^:]+:[^:]+:/
在 ERROR -- : 之后捕获其中的前两个字符串
(?>ERROR -- :)(?[^:]+:[^:]+:)
假设我收集了这样的原始数据
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
你可以这样做:
请注意,这与您最初的尝试很接近:
(?>ERROR -- :)(?<msg1>.*):
但不完全是,因为您使用 ?>
进行后视,但它应该是 (?<=
)。
一个或多个 'not :' 通过 ':' 使用
[^:]+:
在字符串中找到前两个
/[^:]+:[^:]+:/
在 ERROR -- : 之后捕获其中的前两个字符串
(?>ERROR -- :)(?[^:]+:[^:]+:)