【发布时间】:2018-01-13 06:54:52
【问题描述】:
我还在学习 PHP,在今天之前从未接触过 regex 或 preg_replace,所以请原谅我的无知。我正在为我的论坛修改一个脚本,以将帖子中的 YouTube 链接转换为嵌入代码。到目前为止,如果字符串仅包含单个链接,则它可以工作,但是当我在多个帖子中有多个链接时,它不会。此外,我不确定 $text 变量是如何填充的,因为它不仅仅是一个字符串,并且在一个传递给其他函数的变量中包含用户的所有状态帖子。非常感谢任何帮助。
看起来像一个字符串:
echo "$text";
https://www.youtube.com/watch?v=3rb47k3KHtQtesttesthttps://www.youtube.com/watch?v=ah2rSAdZljMhttps://www.youtube.com/watch?v=ah2rSAdZljM
但实际上它是一个变量中的多个字符串。这让我很困惑,因为我不知道没有数组是如何完成的,我非常想知道。
var_dump($text);
string(43) "https://www.youtube.com/watch?v=3rb47k3KHtQ" string(4) "test" string(4) "test" string(43) "https://www.youtube.com/watch?v=ah2rSAdZljM" string(43) "https://www.youtube.com/watch?v=ah2rSAdZljM"
PHP 代码:
<?php
$search = '/(https:\/\/www\.youtube\.com\/watch.v=[a-z0-9]{8,11})/i';
$replace = '<iframe width="560" height="315" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen src="https://www.youtube.com/embed/';
$replace .= $1;
$replace .= '"></iframe>';
echo preg_replace($search, $replace, $text);
?>
使用 $1 脚本不起作用,除非我缩短文本以删除所有其他链接。我需要能够替换所有链接,但我不知道如何访问正则表达式组,除了我一直关注的教程中的标准 $1、$2、$3 等。我正在尝试做的事情可能吗?
【问题讨论】:
-
对于任何关注此并尝试这样做的人,Will Hines 的回答指出了正确的方向,但我仍然需要调整正则表达式和组匹配。我的正则表达式将整个视频 url 匹配为一组,因此嵌入 src 基本上是:
https://www.youtube.com/embed/https://......为了解决这个问题,我将正则表达式更改为:/(https:\/\/www\.youtube\.com\/watch.v=)([a-z0-9]{8,11})/i,匹配从"\$1"到"\$2",这仅替换视频观看后的 ID?v=
标签: php youtube preg-replace regex-group