Подтвердить что ты не робот

Используя позитивное выражение (? = Regex) с re2

Так как я немного новичок в re2, я пытаюсь выяснить, как использовать позитивный взгляд (?=regex) как JS, С++ или любой стиль PCRE в Перейти.

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

JS:

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

Python:

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

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

4b9b3361

Ответ 1

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

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

Кроме того, из WhyRE2:

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

Ответ 2

Вы можете добиться этого с помощью простого регулярного выражения:

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

sm[1] будет вашим совпадением. Игровая площадка: http://play.golang.org/p/Vyah7cfBlH