我有以下文字:
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进行测试。谢谢!
答案 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