使用 RE2 在 space 之前的字符串之后匹配正则表达式

Regex to match after string before space using RE2

我是 RE2 语法正则表达式的新手,我想匹配特定字符串之后的第一个单词。

例如:

java.lang.OutOfMemoryError: Java 堆 space 发送定期事件时出错 java.lang.NullPointerException: Java 堆 space 发送定期事件时出错

我想捕获 java.lang. 之后的任何内容,这样我就可以得到 OutOfMemoryErrorNullPointerException 错误。我知道在 Python 和 PCRE 中我们可以使用正后视来做到这一点,正则表达式将是 - (?<=java.lang.).*?(?=\s),但这不适用于 RE2。

您可以使用

java\.lang\.([^\s:]+)

详情

  • java\.lang\. - java.lang. 子串
  • ([^\s:]+) - 捕获组 1:除空格和 :.
  • 之外的一个或多个字符

注意:如果您需要获取 java.lang.: 之间的所有文本后跟空格,请使用 java\.lang\.(.*?):\s.

参见 regex demo and the Go demo:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    regex := regexp.MustCompile(`java\.lang\.([^\s:]+)`)
    result := regex.FindStringSubmatch("java.lang.OutOfMemoryError: Java heap space Error sending periodic event")
    fmt.Printf("%q", result[1])
}