需要正则表达式来捕获嵌套在目标标记中的所有内容。
<?xml version="1.0" encoding="utf-8"?>
<data>
<target>
"<x id="c400c8394f0a" pid="NLCaption" name="NLCaption" />Caption"
</target>
<target />
<target><x id="a1e6b03cb682" pid="NLSheets" name="NLSheets" />Sheets"</target>
</data>
感谢Brettz,谁帮我编写了以下正则表达式
$pattern = "@<target(?:\s.*?)?>(.*?)</target\s*>@s";
这个正则表达式完成了这项工作并帮助我获取所有内容。但唯一的问题是它也会捕获<target />
标记。
我想修改那些不会捕获未配对标签的正则表达式。即<target />
请帮帮我
答案 0 :(得分:4)
$data = new SimpleXMLElement($xmlstr);
echo $data->target[0];
答案 1 :(得分:1)
$tagname = 'target';
$pattern = "@<$tagname(?:\s.*?!/)?>(.*?)</$tagname\s*>@s";
答案 2 :(得分:0)
$pattern = "(?<=<target>).+(?=</target>)";
答案 3 :(得分:0)
您可以将第一部分的结尾更改为仅允许空格而不允许其他字符:
<target\s*>(.*?)</target\s*>
xml解析器几乎肯定是正确的长期解决方案,但这是让代码正常工作的快捷方法。