gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:30:08 26 4
gpt4 key购买 nike

我在一块文本上执行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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com