PHP preg_match不匹配

时间:2015-01-16 12:25:47

标签: php regex preg-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的输出为空或不匹配? 请帮助解释这段代码有什么问题? 感谢

伊娃

3 个答案:

答案 0 :(得分:2)

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

s标志启用dotall模式。

使用@ Bob0t建议的this更为明智,因为它们更具防范性,专门用于处理XML和HTML

答案 1 :(得分:0)

试试这个;

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

答案 2 :(得分:0)

正则表达式中的点字符与新行不匹配,这导致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比使用正则表达式更容易。