2 回答
TA贡献1847条经验 获得超11个赞
您可以尝试以下正则表达式:
<\?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>
演示: https ://regex101.com/r/r6Kbh2/3/
TA贡献1719条经验 获得超6个赞
默认情况下,句点与换行符不匹配。您将需要使用s
修饰符。
此外,你的第一个点是贪婪的,它会消耗你所有的<
直到最后一个仍然允许剩余模式匹配的点。我不会使用非贪婪 dot .*?
,而是使用否定字符类来匹配除<
.
/[^<]*<(.*)>.*/s
另一种方法是在字符类中使用\r
(回车)和(换行)字符:\n
/[^<]*<((?:.|[\r\n])*)>.*/
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报