猿问

获取第一个字符 '<' 和最后一个字符 '>' 之间的所有内容

所以我试图只从这种格式中获取 XML:


--------------------------3cbec9ce8f05

Content-Disposition: form-data; name="owServerData"; filename="details.xml"

Content-Type: text/plain


<?xml version="1.0" encoding="UTF-8"?>

<Devices-Detail-Response xmlns="http://www.example.com"> 

 // Rest omitted

</Devices-Detail-Response>

------------------------------3cbec9ce8f05--

所以基本上第一个 < 之后的所有内容以及最后一个 '>' 之间的所有内容。


到目前为止.*<(.*)>.*,我只有返回<?xml version="1.0" encoding="UTF-8"?>


谢谢!


预期结果:


<?xml version="1.0" encoding="UTF-8"?>

<Devices-Detail-Response xmlns="http://www.example.com"> 

 // Rest omitted

</Devices-Detail-Response>


白衣染霜花
浏览 115回答 2
2回答

回首忆惘然

您可以尝试以下正则表达式:<\?xml version="1\.0" encoding="UTF-8"\?>\s*<\s*([^\s]*)(?:.|\s)*<\/\s*\1\s*>输入:--------------------------3cbec9ce8f05Content-Disposition: form-data; name="owServerData"; filename="details.xml"Content-Type: text/plain<?xml version="1.0" encoding="UTF-8"?><Devices-Detail-Response xmlns="http://www.example.com">&nbsp;&nbsp;<device>a</device>&nbsp;<info>abc</info>&nbsp;<test1><u>123</u><v>456</v><z/></test1></Devices-Detail-Response>------------------------------3cbec9ce8f05--输出:<?xml version="1.0" encoding="UTF-8"?><Devices-Detail-Response xmlns="http://www.example.com"&nbsp;&nbsp;<device>a</device>&nbsp;<info>abc</info>&nbsp;<test1><u>123</u><v>456</v><z/></test1></Devices-Detail-Response>演示: https ://regex101.com/r/r6Kbh2/3/

慕侠2389804

默认情况下,句点与换行符不匹配。您将需要使用s修饰符。此外,你的第一个点是贪婪的,它会消耗你所有的<直到最后一个仍然允许剩余模式匹配的点。我不会使用非贪婪 dot&nbsp;.*?,而是使用否定字符类来匹配除<./[^<]*<(.*)>.*/s在Regex101上查看另一种方法是在字符类中使用\r(回车)和(换行)字符:\n/[^<]*<((?:.|[\r\n])*)>.*/
随时随地看视频慕课网APP
我要回答