我想从xml中获取字符串:
https://gdata.youtube.com/feeds/api/videos/MZoO8QVMxkk?v=2
我想将视频标题作为可变$vtitle
,视频描述作为$vdescription
<?php
$vinfo = @file_get_contents("https://gdata.youtube.com/feeds/api/videos/MZoO8QVMxkk?v=2");
$vtitle = preg_match("/<media:title type='plain'>(.*?)<'/media:title>/", $vinfo, $match);
$vtitle = $match[1];
$vdescription = preg_match("/<media:description type='plain'>(.*?)<'/media:description>/", $vinfo, $match);
$vdescription = $match[1];
?>
<h1><?php echo $vtitle; ?></h1>
<p><?php echo $vdescription; ?></p>
$vtitle输出:
新复仇者联盟预告片到来 - 漫威复仇者联盟:奥创纪元 预告片 2
为什么 $vdescription 的输出为空或不匹配?请帮助此代码有什么问题?谢谢
伊娃
您需要
使用s
标志或将.*?
替换为['s'S]*?
s
标志启用点模式。
更可取的是使用它,这是@Bob0t建议的,因为它们更防故障,并且是专门为处理XML和HTML而构建的。
试试这个;
$vdescription = preg_match("/<media:description type='plain'>(.*?)<'/media:description>/si", $vinfo, $match);
正则表达式中的点字符与新行不匹配,这会导致preg_match报告不匹配。
您需要将"s"标志添加到您的模式中。
$vdescription = preg_match("/<media:description type='plain'>(.*?)<'/media:description>/s", $vinfo, $match);
只是为了重申其他人所说的话,使用像 DOMDocument 这样的东西来处理 XML 比使用正则表达式要容易得多。