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 会容易得多。
我想从这里的 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 会容易得多。