什么正则表达式在 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)
.
问题
要给出相同的结果,正则表达式应该是什么样的?
我是如何尝试的:
(?<=-- #region )(.|\n)*?(?=-- #endregion)
给出了类似的结果,但是它隐藏了区域名称,这不适合我
(?<=\n)[^$]+
删除第一个 \n
之前的行首。它看起来与第 1 步一起可以解决我的问题,但我不能将它放在一个表达式中 我试过这样的东西:: (?<=-- #region )((?<=\n)[^$]+)(?=-- #endregion)
^.*#region.*\n
给出了包含区域和名称的完整行,但也不可能与项目 1 组成尝试这样的事情:(?<=(^.*#region.*\n))(.|\n)*?(?=-- #endregion)
你可以整行用--#region匹配到最后。然后你可以利用 \K
清除匹配缓冲区并匹配直到第一次出现 -- #endregion
-- #region .+\K[\s\S]*?(?=-- #endregion)
考虑换行符:
-- #region .+\R\K[\s\S]*?\R(?=-- #endregion)
简要
我正在尝试设置 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)
.
问题
要给出相同的结果,正则表达式应该是什么样的?
我是如何尝试的:
(?<=-- #region )(.|\n)*?(?=-- #endregion)
给出了类似的结果,但是它隐藏了区域名称,这不适合我(?<=\n)[^$]+
删除第一个\n
之前的行首。它看起来与第 1 步一起可以解决我的问题,但我不能将它放在一个表达式中 我试过这样的东西::(?<=-- #region )((?<=\n)[^$]+)(?=-- #endregion)
^.*#region.*\n
给出了包含区域和名称的完整行,但也不可能与项目 1 组成尝试这样的事情:(?<=(^.*#region.*\n))(.|\n)*?(?=-- #endregion)
你可以整行用--#region匹配到最后。然后你可以利用 \K
清除匹配缓冲区并匹配直到第一次出现 -- #endregion
-- #region .+\K[\s\S]*?(?=-- #endregion)
考虑换行符:
-- #region .+\R\K[\s\S]*?\R(?=-- #endregion)