0

需要一个正则表达式来捕获嵌套在目标标记中的所有内容。

<?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 />标签。

我想修改不捕获未配对标签的正则表达式。IE<target />

请帮我

4

4 回答 4

4

使用SimpleXML

$data = new SimpleXMLElement($xmlstr);
echo $data->target[0];

这是将 SimpleXML 与您的 XML 一起使用的示例

于 2012-04-20T17:05:28.200 回答
1
$tagname = 'target';
$pattern = "@<$tagname(?:\s.*?!/)?>(.*?)</$tagname\s*>@s"; 
于 2012-04-21T06:51:36.583 回答
0
$pattern = "(?<=<target>).+(?=</target>)";
于 2012-04-20T17:01:11.570 回答
0

您可以将第一部分的结尾更改为仅允许空格而不允许其他字符:

<target\s*>(.*?)</target\s*>

xml 解析器几乎可以肯定仍然是正确的长期解决方案,但这是让您的代码工作的快速方法。

于 2012-04-20T17:22:23.043 回答