PHP preg_match doesn't match


PHP preg_match doesn't match

我想从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 比使用正则表达式要容易得多。