【发布时间】:2011-11-20 14:30:33
【问题描述】:
我正在对一段文本执行 preg_match_all 和 str_replace 以获取 YouTube 网址并将其替换为正确的嵌入代码。
假设我有以下文本块:
"bla bla bla bla <-youtube-url-> last few words"
一切正常 - youtube-url 已替换为嵌入代码等。但是,运行 str_replace 后,“最后几句话”从最终输出中消失。我怀疑正则表达式正在吞噬 url 之后的所有内容......这就是我用来匹配和提取 YouTube ID 的内容:
%(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i
任何帮助将不胜感激!
更新:
我刚刚发现只有当 youtube url 有任何尾随参数时才会出现问题。以下输入吞下了最后几个单词:
'www.youtube.com/watch?v=XXXXXXXXX¶meter=data last few words'
但是如果输入是这样的:
'www.youtube.com/watch?v=XXXXXXXXX last few words'
它工作正常。任何人都可以帮助对正则表达式进行必要的调整吗?
【问题讨论】:
-
你能发布一个包含视频链接和周围 html 的 HTML 的小片段吗?
-
这有什么关系?要解析的文本块是来自文本区域的用户输入。
-
好吧,“文本块”根本不是文本区域或用户输入,这一点并不明显。
标签: php regex youtube preg-match-all str-replace