youtube preg_replace link 不同
youtube preg_replace link different
我将此代码制作成 preg_replace youtube 代码,但我遇到了问题,这是我的代码
// replace video Youtube to thumbnail
$string = array('http://youtube.com/watch?v=slBEtqC_JsI', 'https://youtu.be/bOxza0rLv1o');
//fix the '/' in the end of url
$string = trim($string, '/');
$search = array();
$search[0] = '~(?:https://(?:www\.)?youtube\.com\/watch\?v=)?([a-zA-Z0-9_\-+?:]+)~';
$search[1] = '~(?:https://(?:www\.)?youtu\.be\/)?([a-zA-Z0-9_\-+?:]+)~';
$replace = array();
$replace[1] = 'https://i.ytimg.com/vi//hqdefault.jpg';
$replace[0] = 'https://i.ytimg.com/vi//hqdefault.jpg';
$soc_youtube = preg_replace($search,$replace,$string);
代码不改变字符串,输出将是
https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/https:/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg//https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/youtu/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg.https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/be/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg/https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/bOxza0rLv1o/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg);
有人可以帮我解决这个问题吗?
感谢您的帮助
您可以使用
'~(?:https?://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/))?([a-zA-Z0-9_\-+?:]+)/?~'
见regex demo。图案详情:
(?:
- 第一个交替组开始:
https?://(?:www\.)?youtu
- https://
或 https://
,然后是可选的 www.
子串,然后是 youtu
子串
(?:
- 第二个交替组开始:
be\.com/watch\?v=
- be.com/watch?v=
子串
|
- 或
\.be/
- .be/
子字符串
)
- 第二轮交替组结束
)?
- 1 次或 0 次
([a-zA-Z0-9_\-+?:]+)
- 第 1 组:一个或多个单词,-
、+
、?
或 :
个字符
/?
- 一个可选的 /
参见 PHP demo online:
$string = array('http://youtube.com/watch?v=slBEtqC_JsI', 'https://youtu.be/bOxza0rLv1o', 'http://youtube.com/watch?v=slBEtqC_JSJ/');
$search = '~(?:https?://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/))?([a-zA-Z0-9_+?:-]+)/?~';
$replace = 'https://i.ytimg.com/vi//hqdefault.jpg';
$soc_youtube = preg_replace($search,$replace,$string);
print_r($soc_youtube);
输出:
Array
(
[0] => https://i.ytimg.com/vi/slBEtqC_JsI/hqdefault.jpg
[1] => https://i.ytimg.com/vi/bOxza0rLv1o/hqdefault.jpg
[2] => https://i.ytimg.com/vi/slBEtqC_JSJ/hqdefault.jpg
)
我将此代码制作成 preg_replace youtube 代码,但我遇到了问题,这是我的代码
// replace video Youtube to thumbnail
$string = array('http://youtube.com/watch?v=slBEtqC_JsI', 'https://youtu.be/bOxza0rLv1o');
//fix the '/' in the end of url
$string = trim($string, '/');
$search = array();
$search[0] = '~(?:https://(?:www\.)?youtube\.com\/watch\?v=)?([a-zA-Z0-9_\-+?:]+)~';
$search[1] = '~(?:https://(?:www\.)?youtu\.be\/)?([a-zA-Z0-9_\-+?:]+)~';
$replace = array();
$replace[1] = 'https://i.ytimg.com/vi//hqdefault.jpg';
$replace[0] = 'https://i.ytimg.com/vi//hqdefault.jpg';
$soc_youtube = preg_replace($search,$replace,$string);
代码不改变字符串,输出将是
https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/https:/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg//https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/youtu/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg.https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/be/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg/https://i.ytimg.com/vi/https:/hqdefault.jpg//https://i.ytimg.com/vi/i/hqdefault.jpg.https://i.ytimg.com/vi/ytimg/hqdefault.jpg.https://i.ytimg.com/vi/com/hqdefault.jpg/https://i.ytimg.com/vi/vi/hqdefault.jpg/https://i.ytimg.com/vi/bOxza0rLv1o/hqdefault.jpg/https://i.ytimg.com/vi/hqdefault/hqdefault.jpg.https://i.ytimg.com/vi/jpg/hqdefault.jpg);
有人可以帮我解决这个问题吗? 感谢您的帮助
您可以使用
'~(?:https?://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/))?([a-zA-Z0-9_\-+?:]+)/?~'
见regex demo。图案详情:
(?:
- 第一个交替组开始:https?://(?:www\.)?youtu
-https://
或https://
,然后是可选的www.
子串,然后是youtu
子串(?:
- 第二个交替组开始:be\.com/watch\?v=
-be.com/watch?v=
子串|
- 或\.be/
-.be/
子字符串
)
- 第二轮交替组结束
)?
- 1 次或 0 次([a-zA-Z0-9_\-+?:]+)
- 第 1 组:一个或多个单词,-
、+
、?
或:
个字符/?
- 一个可选的/
参见 PHP demo online:
$string = array('http://youtube.com/watch?v=slBEtqC_JsI', 'https://youtu.be/bOxza0rLv1o', 'http://youtube.com/watch?v=slBEtqC_JSJ/');
$search = '~(?:https?://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/))?([a-zA-Z0-9_+?:-]+)/?~';
$replace = 'https://i.ytimg.com/vi//hqdefault.jpg';
$soc_youtube = preg_replace($search,$replace,$string);
print_r($soc_youtube);
输出:
Array
(
[0] => https://i.ytimg.com/vi/slBEtqC_JsI/hqdefault.jpg
[1] => https://i.ytimg.com/vi/bOxza0rLv1o/hqdefault.jpg
[2] => https://i.ytimg.com/vi/slBEtqC_JSJ/hqdefault.jpg
)