Regex 如果取消冻结,多行捕获正则表达式将失败

Regex 如果取消冻结,多行捕获正则表达式将失败,regex,Regex,我想从xml文件中检索数据。例如,我使用的regexp如下所示: / <OVERLAYLINKPROJECT(?:.|\s)+ <OUTPUT /xU / U。为什么?问题是,令人惊讶的是 您使用了(?:.|\s),可能是因为与换行符不匹配,并且您的输入包含它们。但是,\s还匹配其他空白,这些空白也可以由匹配 如果不使用ungreedy修饰符,(?:.|\s)+首先匹配 <OVERLAYLINKPROJECT id='0773C138' parent_id='007285A0

我想从xml文件中检索数据。例如,我使用的regexp如下所示:

/
<OVERLAYLINKPROJECT(?:.|\s)+
<OUTPUT
/xU
/

U
。为什么?

问题是,令人惊讶的是

您使用了
(?:.|\s)
,可能是因为
与换行符不匹配,并且您的输入包含它们。但是,
\s
还匹配其他空白,这些空白也可以由
匹配

如果不使用ungreedy修饰符,
(?:.|\s)+
首先匹配

<OVERLAYLINKPROJECT id='0773C138' parent_id='007285A0' ovl_id='0x4b' run_address='0x9022a' run_size='0x450' live_address='0x40c111' live_size='0x678' >
<FILE_NAME><![CDATA[xxx.ovl]]></FILE_NAME>
<OUTPUT_SECTIONS>
<OUTPUT_SECTION id='0773C138' name='xxxx' type='SHT_PROGBITS' start_address='0x9022a' word_size='0x450' word_size_unmapped='0x0' in_overlay='' >
<INPUT_SECTIONS>
<INPUT_SECTION id='0580D5B0' name='yyyy' start_address='0x9022b' size='0x44f' element_at='0x0' >
/
<OVERLAYLINKPROJECT.+
<OUTPUT
/xs
<OVERLAYLINKPROJECT(?:.|\s)+?<OUTPUT