什么正则表达式在 2 个模式行之间产生结果?

What regex produces the result between 2 pattern rows?

简要

我正在尝试设置 Sublime Text 4 以隐藏代码中的区域。为此,我使用了 AutoFold 扩展,它可以根据指定的正则表达式折叠代码片段。我需要一个正则表达式,它将在两行之间提供内容,其中第一行包含 #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).

问题

要给出相同的结果,正则表达式应该是什么样的?

我是如何尝试的:

  1. (?<=-- #region )(.|\n)*?(?=-- #endregion) 给出了类似的结果,但是它隐藏了区域名称,这不适合我
  2. (?<=\n)[^$]+ 删除第一个 \n 之前的行首。它看起来与第 1 步一起可以解决我的问题,但我不能将它放在一个表达式中 我试过这样的东西:: (?<=-- #region )((?<=\n)[^$]+)(?=-- #endregion)
  3. ^.*#region.*\n 给出了包含区域和名称的完整行,但也不可能与项目 1 组成尝试这样的事情:(?<=(^.*#region.*\n))(.|\n)*?(?=-- #endregion)

你可以整行用--#region匹配到最后。然后你可以利用 \K 清除匹配缓冲区并匹配直到第一次出现 -- #endregion

-- #region .+\K[\s\S]*?(?=-- #endregion)

Regex demo

考虑换行符:

-- #region .+\R\K[\s\S]*?\R(?=-- #endregion)

Regex demo