使用Regex从XML中提取

时间:2012-04-20 16:56:39

标签: php regex

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

<?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 />

请帮帮我

4 个答案:

答案 0 :(得分:4)

使用SimpleXML

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

Here is an example of using SimpleXML with your XML

答案 1 :(得分:1)

$tagname = 'target';
$pattern = "@<$tagname(?:\s.*?!/)?>(.*?)</$tagname\s*>@s"; 

答案 2 :(得分:0)

$pattern = "(?<=<target>).+(?=</target>)";

答案 3 :(得分:0)

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

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

xml解析器几乎肯定是正确的长期解决方案,但这是让代码正常工作的快捷方法。