正则表达式匹配开始模式和第一个AND ONLY FIRST出现结束模式

时间:2017-11-09 17:09:28

标签: regex

我有以下文字:

Global
    GlobalSection(TeamFoundationVersionControl) = preSolution
        Blah Blah
        Blah Blah
    EndGlobalSection
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Blah Blah
        Blah Blah
    EndGlobalSection
EndGlobal

以及以下正则表达式:

GlobalSection\(TeamFoundationVersionControl\)((.|\n)*)(EndGlobalSection\r)

我想找到 TeamFoundationVersionControl 的第一个GlobalSection,即只需以下内容:

GlobalSection(TeamFoundationVersionControl)= preSolution         Blah Blah         Blah Blah     EndGlobalSection

正则表达式无效!它选择以下即两个部分(错误!):

       GlobalSection(TeamFoundationVersionControl) = preSolution
            Blah Blah
            Blah Blah
        EndGlobalSection
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
            Blah Blah
            Blah Blah
        EndGlobalSection

我需要它在第一次出现的EndGlobalSection时停止。请帮忙!

BTW:我正在使用在线RegEx测试员Regex Storm进行测试。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用non-greedy *? operator,它会尽快终止(在第一个EndGlobalSection之前):

GlobalSection\(TeamFoundationVersionControl\)((.|\n)*?)EndGlobalSection

演示here

如果您使用的正则表达式引擎支持inline modifiers,则可以激活DOTALL (or single-line) mode,允许点匹配换行符(使用s修饰符,但在Ruby中除外#39} ; s称为m):

(?s)GlobalSection\(TeamFoundationVersionControl\)(.*?)EndGlobalSection