使用正则表达式与XML

问题描述 投票:1回答:1

我正在尝试使用正则表达式从以下XML提要中提取CDATA:http://www.patrickarundell.net/THREE-IE-FEED.asp

我的代码如下:

$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>';

输出是:

Array
(
    [0] => CDATA[
    [1] => CDATA
    [2] => [
)

我知道我没有正确的表达式,但是当我尝试以下语句时:

preg_match('/(<![CDATA[)(.*)/', $xml, $arr);

我收到一个错误:

警告:对于偏移量为15的字符类,preg_match()[function.preg-match]:编译失败:缺少终止]

我认为这可能会在方括号'['之后给我详细信息,这正是我正在寻找的。

任何帮助表示感谢,我已经尝试了几个小时,没有运气。

php regex cdata
1个回答
3
投票

错误消息的原因是它缺少关闭字符类的]。但你不想用你想要匹配它的[定义一个角色类,所以你需要逃脱它\[

<!\[(CDATA)\[\s*(.*?)\s*\]\]>

我在regexr上测试了它

.*?是一个非贪婪的比赛,它尽可能地匹配,直到它找到结束的]]>

© www.soinside.com 2019 - 2024. All rights reserved.