正则表达式要匹配YouTube链接,需要从匹配中省略行尾


Regex to match YouTube links, need to omit end of line from match

(简化(来自WordPress项目的代码:

function fix_youtube_links ($content) {
    $append = '&w=480&rel=0';
    $content = preg_replace('/^http:'/'/(?:www'.)?(?:youtube.com'/(?:v'/|watch['/'#?])|(youtu'.be'/)).*/im', '$0'.$append, $content);
    return $content;
}
add_filter('the_content', 'fix_youtube_links');

$content看起来像这样:

blah blah blah
http://www.youtube.com/watch?v=rUtdP3jQKUA
blah blah blah

我想在比赛中添加$append并得到这个:

blah blah blah
http://www.youtube.com/watch?v=rUtdP3jQKUA&w=480&rel=0
blah blah blah

但相反,我得到的是:

blah blah blah
http://www.youtube.com/watch?v=rUtdP3jQKUA
&w=480&rel=0
blah blah blah

。因为线尾被包含在比赛中。

有什么建议吗?欢迎正则表达式或非正则表达式解决方案。

试试这个:

$content = preg_replace('/^http:'/'/(?:www'.)?(?:youtube.com'/(?:v'/|watch['/'#?])|(youtu'.be'/))[^'n'r]*/im', '$0'.$append, $content);