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

时间:2020-03-04 08:50:26

标签: regex go re2

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

例如:

java.lang.OutOfMemoryError: Java heap space Error sending periodic event java.lang.NullPointerException: Java heap space Error sending periodic event

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

1 个答案:

答案 0 :(得分:2)

您可以使用

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

详细信息

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

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

请参见regex demoGo 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])
}