#regex #sublimetext3 #regex-lookarounds
Вопрос:
Кратко
Я пытаюсь настроить Sublime Text 4, чтобы скрыть области в коде. Для этого я использую расширение AutoFold, которое может сворачивать фрагменты кода в соответствии с указанными регулярными выражениями. Мне нужно регулярное выражение, которое будет содержать содержимое между 2 строками, где первая содержит #region
, а последняя содержит #endregion
.
Ближе к теме:
Там есть фрагмент кода:
-- #region NAME 1
line 1
line 2
-- #endregion
line 3
-- #region NAME 2
line 4
line 5
-- #endregion
Я хочу получить результат, как показано на рисунке
Для демонстрации я использую 2 регулярных (?<=-- #region NAME 1)(.|n)*?(?=-- #endregion)
выражения и (?<=-- #region NAME 2)(.|n)*?(?=-- #endregion)
.
Вопрос
Как должно выглядеть регулярное выражение, которое даст тот же результат?
Как я старался:
(?<=-- #region )(.|n)*?(?=-- #endregion)
дает аналогичный результат, но скрывает название региона, что меня не устраивает🙁(?<=n)[^$]
удаляет начало строки перед первойn
. Это похоже на то, что вместе с шагом 1 решит мою проблему, но я не могу объединить это в одном выражении🙁 Я попробовал что-то вроде этого::(?<=-- #region )((?<=n)[^$] )(?=-- #endregion)
^.*#region.*n
дает полную строку, содержащую регион и название, но ее также невозможно составить с помощью пункта 1 🙁 попробовал что-то вроде этого:(?<=(^.*#region.*n))(.|n)*?(?=-- #endregion)
Ответ №1:
Вы можете сопоставить всю строку с — #регионом до конца. Затем вы можете использовать K
для очистки буфера совпадения и сопоставления до первого появления — #endregion
-- #region . K[sS]*?(?=-- #endregion)
Демонстрация регулярных выражений
Учет новых строк:
-- #region . RK[sS]*?R(?=-- #endregion)