Php 将正则表达式与XML结合使用
我尝试使用正则表达式从以下XML提要提取CDATA: 我的代码如下:Php 将正则表达式与XML结合使用,php,regex,cdata,Php,Regex,Cdata,我尝试使用正则表达式从以下XML提要提取CDATA: 我的代码如下: $xml = file_get_contents('http://www.patrickarundell.net/THREE-IE-FEED.asp'); $arr = array(); preg_match('/(CDATA)(.*)/', $xml, $arr); echo '<pre>'; print_r($arr); echo '</pre>'; 我知道我的正则表达式不太正确,但当我
$xml = file_get_contents('http://www.patrickarundell.net/THREE-IE-FEED.asp');
$arr = array();
preg_match('/(CDATA)(.*)/', $xml, $arr);
echo '<pre>';
print_r($arr);
echo '</pre>';
我知道我的正则表达式不太正确,但当我尝试以下语句时:
<!\[(CDATA)\[\s*(.*?)\s*\]\]>
preg_匹配('/(
感谢您的帮助,我已经尝试了几个小时了,但运气不佳。错误消息的原因是它缺少字符类的结束符]
。但是您不想用您的[
定义字符类。您想匹配它,所以必须将其转义为\[
我在这里测试了它
*?
是一个非贪婪匹配,它匹配的越少越好,直到找到结束的]]> />代码> 你考虑过XML解析器吗?是的,我使用SimeXMLMeta来解析文件的其余部分,它工作得很好。它不会给我带来任何问题。但是我不能用SimeXMLMeta元素来获取CDATA部分中的细节。如果你看到XML文件,实际的星象细节就在节点下面。当我引用这个节点时,它就把所有的D都集中起来了。ata in together.stema,谢谢。只有一个问题,我设法将第一个CDATA值放入数组中。但正如您从XML中看到的,还有许多其他CDATA段。我如何管理它们?@Stephen,我对php不太了解,但有一个函数preg\u match\u all
,请尝试使用它而不是preg\u match
。根据它,你应该做你想做的事。
preg_match('/(<![CDATA[)(.*)/', $xml, $arr);
<!\[(CDATA)\[\s*(.*?)\s*\]\]>