Проблемы с регулярными выражениями в TextMate

#regex #textmate #oniguruma

#регулярное выражение #textmate #онигурума

Вопрос:

Регулярные выражения для меня новы (но они замечательны и полезны: D). Однако, после попытки использовать их в TextMate, я получаю неожиданные результаты. Я не уверен, что это ошибка или так работают регулярные выражения.

У меня есть этот код

 begin text in the middle end and more text and a
second begin second text in the middle end
  

Поиск с begin. end я бы ожидал двух результатов

  1. begin text in the middle end и
  2. begin second text in the middle end

Но я выделяю весь текст; Я ожидал бы, что begin. end будет выполняться поиск . до тех пор, пока не будет найден первый end , но он выполняет поиск до последнего.

Так ли они работают? Где я мог бы научиться использовать регулярные выражения?

По правде говоря, мне интересно просто выбрать внутри . без begin и end , но это другой вопрос.

Ответ №1:

Используйте приведенное ниже регулярное выражение, чтобы получить строки между началом и концом,

 (?<=begin). ?(?=end)
  

ДЕМОНСТРАЦИЯ

Объяснение:

  • (?<=begin) Положительный анализ используется для сопоставления по определенному шаблону. В этом случае механизм регулярных выражений устанавливает соответствующий маркер сразу после начала.
  • . ? Соответствует одному или нескольким символам. ? делает регулярное выражение нежадным, поэтому оно приводит к кратчайшему совпадению.
  • (?=end) Как только он находит строку end , механизм регулярных выражений прекращает сопоставление. Таким образом, вы получаете символы между началом и концом.

Комментарии:

1. Ключ был . ? 😉 Остальное — это просто то, что мне нужно изучить.

2. @Manuel добавил exp для . ?

3. посмотрите на разницу, добавив и удалив ? в этой демонстрации regex101.com/r/oX4qT1/3