【发布时间】:2019-02-17 04:37:36
【问题描述】:
您好,到目前为止,已经有很多关于此的问题。但是我已经尝试了很多,但无法在我需要的地方得到它。
我需要一个正则表达式,它可以从包含 iframe 的字符串中提取 youtube 网址。
示例文本:
<p>
</p><p>Garbage text</p><p><iframe width="560" height="315" src="//www.youtube.com/embed/PZlJFGgFTfA" frameborder="0" allowfullscreen=""></iframe></p>
这是我想出的正则表达式:
(\bhttps?:)?\/\/[^,\s()<>]+(?:\([\w\d]+\)|(?:[^,[:punct:]\s]|\/))
我在一个函数上使用它,它返回一个空数组。有人知道我的功能有什么问题吗?
function extractEmbedYT($str) {
preg_match('/(\bhttps?:)?\/\/[^,\s()<>]+(?:\([\w\d]+\)|(?:[^,[:punct:]\s]|\/))/', $str, $matches, PREG_OFFSET_CAPTURE, 0);
return $matches;
}
编辑 1:更改了我的正则表达式中的捕获组,因此它不会捕获最后一个字符
编辑 2:添加了一些 PHP 代码以放入上下文中,因为它在 Regex101 中工作,但在我的脚本中没有。
【问题讨论】:
-
如果您不需要捕获,为什么要使用捕获组?将
([^,[:punct:]\s]|\/)替换为非捕获组 -(?:[^,[:punct:]\s]|\/)。 -
嗯,这在 Regex101 中有效,但不适用于我的函数...我不明白为什么...你能看看这里3v4l.org/fmG1W 吗?我会相应地更新我的问题,如果您可以发布答案,我也会接受它。
-
在您的代码中,您有
$string变量,但您将$str传递给extractEmbedYT函数 - 请参阅 3v4l.org/1OFDf -
天啊...哇,谢谢维克托!没发现