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¶meter
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¶meter=data last few words'
但是如果输入是这样的:
'www.youtube.com/watch?v=XXXXXXXXX last few words'
它很好用。有人能帮忙调整正则表达式吗?我不清楚您到底想做什么。但是我建议您尝试一个regex测试工具,比如,但是还有其他的。它允许您直观地检查正则表达式的结果
我通常分解复杂的交替,以了解发生了什么。
您可能对上一个术语
[^”&?/]{11}
有问题,但不确定您正在尝试做的事情。(下面是Perl) 输出:
all: 'youtube.com/watch?v=XXXXXXXXX¶meter=data last few words'
1: ''
2: ''
3: 'watch?v='
4: ''
5: 'XXXXXXXXX'
6: '¶meter=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¶meter=data last few words'
1: ''
2: ''
3: 'watch?v='
4: ''
5: 'XXXXXXXXX'
6: '¶meter=data last few words'
%(?:youtube\.com/(?:[^/]+/\S+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i