Regex для сопоставления всего до первого появления строки во вкусе Golang - PullRequest
1 голос
/ 09 мая 2019

У меня есть следующая строка:

my-name-host1.host2.host3.com: 80

Я ищу регулярное выражение, которое соответствует всему, пока строка -host1.host2.host3.com:80, т.е. результат должен быть:

мое имя

Кажется, мое текущее регулярное выражение в JavaScript работает. Проблема в том, что мне нужно это регулярное выражение в "Golang flavour".

https://regex101.com/r/ebSTuq/1

При переключении на Golang я получаю это регулярное выражение с ошибкой шаблона:
.*(?=\Q-host1.host2.host3.com:80\E)

Предыдущий токен не поддается количественной оценке.

1 Ответ

1 голос
/ 09 мая 2019

Go regex engine - RE2, а RE2 не поддерживает обходные пути .

На самом деле, вам не нужно заглядывать вперед: используйте шаблон с не жадными точками в начале, захватите его в группу 1 и используйте оставшуюся часть шаблона, как есть, для проверки правого контекста:

str := `my-name-host1.host2.host3.com:80`
re := regexp.MustCompile(`(.*?)-host1\.host2\.host3\.com:80`)
match := re.FindStringSubmatch(str)
fmt.Println(match[1]) 

Вывод: my-name, см. Демоверсию Go .

Обратите внимание на использование функции FindStringSubmatch , которая обеспечивает доступ к захваченным подстрокам.

Также см. Демонстрационную версию Go regex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...