Использование positive-lookahead (?=регулярное выражение) с re2

так как я немного новичок с ле2, Я пытаюсь понять, как использовать positive-lookahead (?=regex) как JS, C++ или любой стиль PCRE в Go.

вот несколько примеров того, что я ищу.

JS:

'foo bar baz'.match(/^[sS]+?(?=baz|$)/);

Python:

re.match('^[sS]+?(?=baz|$)', 'foo bar baz')
  • Примечание: оба примера соответствуют 'foo bar '

Спасибо большое.

2 ответов


по словам Синтаксис Документация эта функция не поддерживается:

(?=re) перед текстом соответствующего re (НЕ ПОДДЕРЖИВАЕТСЯ)

С WhyRE2:

в принципе, RE2 не поддерживает конструкции, для которых известны только обратные решения. Таким образом, утверждения backreferences и look-around не поддерживаются.


вы можете достичь этого с помощью более простого regexp:

re := regexp.MustCompile(`^(.+?)(?:baz)?$`)
sm := re.FindStringSubmatch("foo bar baz")
fmt.Printf("%q\n", sm)

sm[1] будет ваш матч. Площадка: http://play.golang.org/p/Vyah7cfBlH