PHP preg_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 的输出:

New Avengers Trailer Arrives - Marvel's Avengers: Age of Ultron Trailer 2

为什么 $vdescription 的输出为空或不匹配? 请帮助这段代码有什么问题? 谢谢

伊娃

试试这个;

$vdescription = preg_match("/<media:description type='plain'>(.*?)‬‬<\/media:description>/si", $vinfo, $match);

您需要使用 s 标记或将 .*? 替换为 [\s\S]*?

s 标志启用 dotall 模式。

更建议使用@Bob0t 建议的 this,因为它们更不易出错,并且专门用于处理 XML 和 HTML

正则表达式中的点字符不匹配新行,这导致 preg_match 报告没有匹配项。

You need to add the "s" flag to your pattern.

    $vdescription = preg_match("/<media:description type='plain'>(.*?)‬‬<\/media:description>/s", $vinfo, $match);

重申一下其他人所说的话,与使用正则表达式相比,使用 DOMDocument 之类的东西来处理 XML 会容易得多。