Чего нет в движке RE2 в Go
Движок RE2 сознательно не реализует часть приемов из других библиотек. Их нельзя обойти флагом: шаблон либо не соберется, либо не будет работать так, как в учебниках по другим языкам.
Нет просмотра вперед и назад, нет обратных
ссылок на уже найденный текст вроде \1,
нет ревнивых квантификаторов с фигурными
скобками в стиле других движков. В Go
ленивость задают только *?, +?
и ?? после обычных квантификаторов.
Обратная ссылка внутри образца тоже не
поддерживается: без этих приемов задачу
решают якорями, несколькими шагами или
обычной строковой логикой.
Попытка собрать просмотр вперед часто заканчивается ошибкой сборки:
package main
import (
"fmt"
"regexp"
)
func main() {
_, err := regexp.Compile(`a(?=b)`)
fmt.Println(err != nil)
}
Дан следующий код:
_, err := regexp.Compile(`(.)\1`)
fmt.Println(err != nil)
Скажите, соберется ли шаблон с обратной ссылкой.
Дан следующий код:
_, err := regexp.Compile(`(?<=a)b`)
Скажите, поддерживается ли просмотр назад.
Дана строка:
txt := "demo"
Объясните, как проверить суффикс без просмотра назад, используя якоря или два шага.