您好我正在尝试解析一些我想出的自制bbcode并且遇到困难时间。我是regex的新手,但认为这将是一个很好的自学方式。
[%url = http://google.com] google链接[/ url%]
<a href='google.com' google link </a>
[%video = http://youtube.com?v = blah]
i will run the link through a automatic embed function
developed in php..i just need to parse the link
[%PAGEBREAK%]
<hr>
[%img = wateva.jpg%]
<img src='wateva.jpg'>
到目前为止,我已经完成了一个效果很好的网址...见下文
$url_pattern = "/\[\s*%\s*(URL|url)\s*=\s*(.*)\](.*)\[\s*\/\s*(URL|url)\s*%\s*\]/i";
$description = preg_replace($url_pattern, "<a href='$2'>$3</a>", $description);
但是当我试图拍摄图片时......(见下文)
$img_pattern ="/\[\s*%\s*(IMG|img)=(.*)\s*(%\s*\])/i";
$description = preg_replace($img_pattern, "<img src=\'$2\' style='width: 700px; height: auto; display:block;\'>", $description);
这是我的测试文字:
*最少100字。将您的项目描述与图像,视频和/或链接相结合..只是不要写小说!使用下面的图像部分,使用与您的文字对应的图像。说明栏中的图标将允许您添加其他媒体,如链接和视频。最少100字。将您的项目描述与图像,视频和/或链接相结合..只是不要写小说!使用下面的图像部分,使用与您的文字对应的图像。说明栏中的图标将允许您添加其他媒体,如链接和视频。最少100字。提供项目描述以及图像,视频和/或链接..
[%分页符%]
[%IMG = uploads / 06-26-11 / Cog.gif%]
只是不写小说!使用下面的图像部分,使用与您的文字对应的图像。说明栏中的图标将允许您添加其他媒体,如链接和视频。最少100字。将您的项目描述与图像,视频和/或链接相结合..只是不要写小说!使用下面的图像部分,使用与您的文字对应的图像。说明栏中的图标将允许您添加其他媒体,如链接和视频。这是[%URL = http://google.com]链接[/ URL%]
这是一个黑帮舞蹈的视频
[%VIDEO = HTTP://www.youtube.com/watch V = lZMFwKVjV5s%] *
答案 0 :(得分:2)
.*
中的问题很可能是/\[\s*%\s*(IMG|img)=(.*)\s*(%\s*\])/i
。 *
贪婪 - 它会匹配文档的末尾,然后回溯到 last %]
以匹配它。通常,除非您设置/s
标记,导致.
匹配换行符(也称为Dot-All
标志),否则问题将被隐藏。
一个简单的解决方案是使用延迟量词,因此.*?
默认情况下不匹配任何内容,但随后匹配越来越多的字符,直到找到第一个 %]
:
/\[\s*%\s*(img)=(.*?)\s*(%\s*\])/i
更好的选择是定义img
标记中可接受的字母表。例如,]
或换行符以外的任何内容:
/\[\s*%\s*(img)=([^\]\n\r]*)\s*(%\s*\])/i
另请参阅:Laziness Instead of Greediness
你可能也想修复其他模式,他们也有同样的问题 最后,我建议查看现有bbcode解析器的实现。这些代码可以有嵌套的结构(例如,blockquote中链接中的图像),这使得它们难以正确解析。