BBcode解析问题

3
我正在建立自己的论坛,用户可以使用不同类型的BBcode之一是[youtube] [/youtube]来嵌入YouTube视频,
这个想法是为了使其傻瓜式操作,用户可以输入完整的URL或者只是视频代码,如下所示
[youtube]http://www.youtube.com/watch?v=AJ3_kndmeCg[/youtube] [youtube]http://www.youtube.com/watch?v=AJ3_kndmeCg&feature=related[/youtube] [youtube]AJ3_kndmeCg[/youtube]
以下是我的代码,可以从完整的URL中获取代码。
<?php
$getpost=$_POST['post'];  
$getpost=preg_replace("'\[youtube\].*?=(.*?)&.*?\[/youtube\]'is",'yt link is \\1',$getpost);  
$getpost=preg_replace("'\[youtube\].*?=(.*?)\[/youtube\]'is",'yt link is \\1',$getpost);  
$getpost=preg_replace("'\[youtube\](.*?)\[/youtube\]'is",'yt link is \\1',$getpost);  
?>

结果如下:

yt链接为AJ3_kndmeCg
yt链接为AJ3_kndmeCg
yt链接为AJ3_kndmeCg

如果我只想嵌入3个YouTube视频,那么它可以完美地工作,但是如果我想像这样嵌入6个YouTube视频:
This text contains links to YouTube videos, but they are not properly formatted. The correct format for embedding a YouTube video in HTML is:
``` ```
Replace "VIDEO_ID" with the actual ID of the YouTube video you want to embed.
这段文字包含了一些 YouTube 视频的链接。其中 "yt link is AJ3_kndmeCg"、"[youtube]AJ3_kndmeCg" 和 "yt link is http://www.youtube.com/watch?v=AJ3_kndmeCg" 都是指向同一个视频的链接。另外,最后一行中的标签没有被正确地闭合。
2个回答

4

2
这应该是被接受的解决方案。为什么要重复发明轮子呢? - Vivin Paliath
谢谢!当你晚上睡着时,小马托尼不会来拜访你。 - Prof. Falken

1

哇,这个正则表达式真的很难写。

我为你写好了:

$getpost=preg_replace('@\[youtube\].*?(?:v=)?([^?&[]+)(&[^[]*)?\[/youtube\]@is',
             'yt link is \\1', $getpost);

这将适用于您提供的所有情况。如果链接以除“v =”之外的部分开头(例如,“{{link1:http://www.youtube.com/watch?foo=bar&v=AJ3_kndmeCg}}”),则它将不会起作用。

享受!


非常感谢,无论用户嵌入多少个视频,它都能很好地工作,对于用户来说这是傻瓜式操作,非常感谢。 - lawrence
2
无论正则表达式多么聪明(我自己喜欢黑客正则表达式!),这对开发人员来说都是相反的,不是傻瓜证明的 :-/ - nicomen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接