我想替换(以及更改)文本块中没有查询字符串和手动查询字符串的所有youtube链接。
例如,文本代码可能如下所示:
http://youtube.com/embed/ABC
http://youtube.com/embed/DEF?foo=bar
http://youtube.com/embed/EFG
我希望它看起来像:
http://youtube.com/embed/ABC?sup=bro
http://youtube.com/embed/DEF?foo=bar
http://youtube.com/embed/EFG?sup=bro
使用PHP实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
只需检查:
?
,^([^?]+)$
\?$
$links = array(
'http://youtube.com/embed/ABC',
'http://youtube.com/embed/DEF?foo=bar',
'http://youtube.com/embed/EFG',
'http://youtube.com/embed/HIJ?',
);
$nlinks = preg_replace('/^([^?]+)$|\?$/', '$1?sup=bro', $links);
var_dump($nlinks);
/*
* array(3) {
* [0]=> string(36) "http://youtube.com/embed/ABC?sup=bro"
* [1]=> string(36) "http://youtube.com/embed/DEF?foo=bar"
* [2]=> string(36) "http://youtube.com/embed/EFG?sup=bro"
* [2]=> string(36) "http://youtube.com/embed/HIJ?sup=bro"
* }
*/
修改强>
我为具有空查询字符串的网址添加了一个案例,例如http://youtube.com/embed/HIJ?
答案 1 :(得分:1)
没有正则表达式的解决方案。将所有URL都放入数组中,使用parse_url()
获取查询字符串部分(如果存在)并将自定义$query
附加到循环中。
$query = 'sup=bro'; // define this
foreach($urls as &$url) {
$parts = parse_url($url);
if (!isset($parts['query'])) {
$url .= '?' . $query;
}
}
print_r($urls);
输出:
Array
(
[0] => http://youtube.com/embed/ABC?sup=bro
[1] => http://youtube.com/embed/DEF?foo=bar
[2] => http://youtube.com/embed/EFG?sup=bro
)
答案 2 :(得分:0)
我认为您需要使用 preg_match 检查字符串。如果您在"?"之后有剩余部分,请保持原样;否则,添加" sup = bro"。
答案 3 :(得分:0)
您可以使用此模式:
$urls = <<<LOD
http://youtube.com/embed/ABC
http://youtube.com/embed/DEF?foo=bar
http://youtube.com/embed/EFG
LOD;
$urls = preg_replace('~/[^/?\s]*\K$~m', '?sup=bro', $urls);