Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php youtube正则表达式会吞下剩余的文本_Php_Regex_Youtube_Preg Match All_Str Replace - Fatal编程技术网

Php youtube正则表达式会吞下剩余的文本

Php youtube正则表达式会吞下剩余的文本,php,regex,youtube,preg-match-all,str-replace,Php,Regex,Youtube,Preg Match All,Str Replace,我正在对一块文本进行preg\u match\u all和str\u replace以获取YouTube URL并用正确的嵌入代码替换它们 假设我有以下文本块: "bla bla bla bla <-youtube-url-> last few words" 任何帮助都将不胜感激 更新: 我刚刚发现,只有当youtube url有任何后续参数时,问题才会发生。以下输入包含最后几个单词: 'www.youtube.com/watch?v=XXXXXXXXX&parameter

我正在对一块文本进行
preg\u match\u all
str\u replace
以获取YouTube URL并用正确的嵌入代码替换它们

假设我有以下文本块:

"bla bla bla bla <-youtube-url-> last few words"
任何帮助都将不胜感激

更新:

我刚刚发现,只有当youtube url有任何后续参数时,问题才会发生。以下输入包含最后几个单词:

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

'www.youtube.com/watch?v=XXXXXXXXX last few words'

它很好用。有人能帮忙调整正则表达式吗?

我不清楚您到底想做什么。但是我建议您尝试一个regex测试工具,比如,但是还有其他的。它允许您直观地检查正则表达式的结果


我通常分解复杂的交替,以了解发生了什么。
您可能对上一个术语
[^”&?/]{11}
有问题,但不确定
您正在尝试做的事情。(下面是Perl)

输出:

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'

+
更改为
\S+
,这样就不会将空白作为正则表达式的一部分捕获

%(?:youtube\.com/(?:[^/]+/\S+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i

*
捕获了整行,而你的正则表达式的其余部分什么也没做。

我的错。正如我最初怀疑的那样,正则表达式没有问题

我将用户输入传递给PHP处理程序,而没有通过first转义输入。因此,处理程序假定
¶meter=data
是下一个输入参数-导致一个断开的POST变量


很抱歉我的无能,谢谢你的帮助!

你能发布一个包含视频链接和周围HTML的HTML小片段吗?这有什么关系?要解析的文本块是用户从文本区域输入的。“文本块”不是很明显“是一个文本区域或用户输入。是的,这是我需要的。然而,我尝试了你的建议,结果是一样的:(也许我在别的地方搞砸了。。。
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'
%(?:youtube\.com/(?:[^/]+/\S+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i