我想使用preg_replace将存储在我的数据库中的标准YouTube视频链接(例如:https://www.youtube.com/watch?v=zVzhpkFBFP8)更改为嵌入的网址(例如:https://www.youtube.com/embed/zVzhpkFBFP8)。到目前为止,这是我的代码:
<?php
$Link = getuser($my_id, 'YoutubeLink');
$LinkNew = preg_replace("/watch?v=*/","embed*/","$Link");
echo "$LinkNew" ?>
但它不起作用。我可能做了一些愚蠢的事情,但我是php的新手,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
你的正则表达式不起作用,因为?
是正则表达式中的特殊字符,所以你需要转义它。问号使前面的字符可选。要转义,只需在\?
之前添加反斜杠。
*
也被错误地使用了。星号是一个量词,所以你要说零或多个等号。如果你想在等号之后的所有内容,那么你需要.*
。这将获得所有其他角色,因为.
是任何角色,与*
配对就是一切。你实际上并不想这样做,因为你没有对它进行分组,而替换只是删除它。如果您要进行分组,则可以使用$1
在替换中使用该值。这是http://www.regular-expressions.info/brackets.html的写作。
<?php
$Link = getuser($my_id, 'YoutubeLink');
$LinkNew = preg_replace("/watch\?v=/","embed/", $Link);
echo "$LinkNew"; ?>
正如@ V13Axel指出的那样,虽然使用str_replace可以很容易地做到这一点。