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