所以我试图仅从这种格式获取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>
答案 0 :(得分:1)
默认情况下,句点与换行符不匹配。您将需要使用s
修饰符。
另外,您的第一个点是贪婪的,它将消耗您所有的<
到最后一个仍然允许其余模式匹配的点。我将使用否定的字符类来匹配除.*?
以外的所有字符,而不是使用非贪心的点<
。
/[^<]*<(.*)>.*/s
在Regex101上查看
另一种方法是在字符类中使用\r
(回车符)和\n
(换行符):
/[^<]*<((?:.|[\r\n])*)>.*/
答案 1 :(得分:1)
您可以尝试以下正则表达式:
<\?xml version="1\.0" encoding="UTF-8"\?>\s*<\s*([^\s]*)(?:.|\s)*<\/\s*\1\s*>
输入:
--------------------------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">
<device>a</device>
<info>abc</info>
<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"
<device>a</device>
<info>abc</info>
<test1><u>123</u><v>456</v><z/></test1>
</Devices-Detail-Response>