Регулярное выражение для соответствия после строки перед пробелом с использованием RE2 - PullRequest
2 голосов
/ 04 марта 2020

Я новичок в RE2 синтаксис регулярных выражений, я хочу, чтобы совпадение первого слова приходит после специфика c строка.

Например:

<em>java.lang.<strong>OutOfMemoryError</strong>: Java heap space Error sending periodic event</em> <em>java.lang.<strong>NullPointerException</strong>: Java heap space Error sending periodic event</em>

I после захвата java.lang. возникает желание получить что-либо, поэтому я могу получить OutOfMemoryError, NullPointerException ошибки. Я знаю, что в Python и PCRE мы можем сделать это, используя положительный взгляд, и регулярное выражение будет - (?<=java.lang.).*?(?=\s), но это не работает для RE2.

1 Ответ

2 голосов
/ 04 марта 2020

Вы можете использовать

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

Подробности

  • java\.lang\. - подстрока java.lang.
  • ([^\s:]+) - Группа захвата 1: один или несколько символов, отличных от пробелов и :.

ПРИМЕЧАНИЕ : если вам нужно получить весь текст в диапазоне от java.lang. до :, а затем нажмите пробел, используйте java\.lang\.(.*?):\s.

См. regex demo и 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])
}
...