#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
я бы ожидал двух результатов
begin text in the middle end
и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