php - youtube正则表达式会吞下剩余的文字

标签 php regex youtube preg-match-all str-replace

我在一块文本上执行preg_match_allstr_replace,以获取YouTube网址并将其替换为正确的嵌入代码。

假设我有以下文本块:

"bla bla bla bla <-youtube-url-> last few words"

一切正常-将youtube-url替换为嵌入代码等。但是,运行str_replace后,“最后几个单词”将从最终输出中消失。我怀疑正则表达式会吞下网址后的所有内容...这就是我用来匹配和提取YouTube ID的内容:
%(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i

任何帮助将不胜感激!

更新:

我刚刚发现,仅当youtube网址具有任何尾随参数时,才会发生此问题。以下输入将的最后几个单词吞下:
'www.youtube.com/watch?v=XXXXXXXXX&parameter=data last few words'

但是,如果输入是这样的:
'www.youtube.com/watch?v=XXXXXXXXX last few words'

它工作正常。任何人都可以为正则表达式进行必要的调整吗?

最佳答案

我通常会分解一些复杂的变化,以找出发生了什么情况。
看来您可能对最后一个词[^"&?/ ]{11}有兴趣,但是不确定
您正在尝试做什么。 (下面是在Perl中)

$samp = 'www.youtube.com/watch?v=XXXXXXXXX&parameter=data last few words';

$regex = qr%

(?:
    youtube\.com/
    (?:
        ( [^/]+/.+/ )    # 1
      | 
        (                # 2 
            v
          | e(?:mbed)?/
        )
      |
        ( .*[?&]v= )     # 3
    )
  |

    ( youtu\.be/ )     #4
)

( [^"&?/ ]{1,11} )     # 5, was {11}

(.*)$                  # 6 the remainder

%xi;


if ( $samp =~ /$regex/ )
{
  # just print what matched
    print "all: '$&' \n";
    print "1:   '$1' \n";
    print "2:   '$2' \n";
    print "3:   '$3' \n";
    print "4:   '$4' \n";
    print "5:   '$5' \n";
    print "6:   '$6' \n";
}

输出:
all: 'youtube.com/watch?v=XXXXXXXXX&parameter=data last few words'
1:   ''
2:   ''
3:   'watch?v='
4:   ''
5:   'XXXXXXXXX'
6:   '&parameter=data last few words'

关于php - youtube正则表达式会吞下剩余的文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477456/

相关文章:

php - 使用 php 在主页上显示名称(来自 mySQL 的数据)

php - PHP解析/语法错误;以及如何解决它们

regex - Bash sed - 在字符串中查找主题标签

javascript - 如何为我嵌入的YouTube播放列表添加Facebook分享按钮

api - Google Developer Console 与 Youtube API 设置说明不匹配

java - 如何获得YouTube视频API以自动同步视频字幕?

php - 在 for 循环中提取 PHP 数组值并传递给 JQuery

javascript - Parent.document.getElementById 和图像路径

regex - 配置单元查询 regexp_extract

ruby - 正则表达式的 o 修饰符是什么意思?