在PHP中需要REGEX帮助。一个简单的。帮帮我!
最近,我在玩phpBB3中的BBCode相关的东西。当我追溯我的数据库,帖子表和随机帖子。我发现图像标签是这样写的[img:fcjsgy5j]。在每个帖子的[img:...]之间会生成8个随机字符。在PHP中需要REGEX帮助。一个简单的。帮帮我!
[img:fcjsgy5j]http://imageurl.jpg[/img]
我的问题是,如何才能让使用的preg_replace()来代替随机字符到这样的..
<img src="http://imageurl.jpg">
$output = preg_replace("`\[img:.+?\](.*?)\[/img\]`i", '<img src="$1"/>', $input);
-
[
开头的字符集。我们不希望那样;我们要字面[
字符匹配,所以我们有一个\
-
.
逃脱它匹配任何字符 -
+
意味着我们匹配1个或多个以前的事情(任何字符) -
?
使得以前量词ungreedy(.+
会匹配一切,对字符串的尽头,那不是我们想要的,我们希望它匹配尽可能少的...只是到下一个]
-
(.*?)
匹配之间的所有垃圾[img]
标签。再次公布。我们把()
放在它的周围,使它成为一组 - 在开始和结束时的'(back-tick)可以是任何字符......无论你开始的任何字符,你必须结束。很多人使用
/
,但我更喜欢back-tick,因为它很少出现在正则表达式的任何位置,因此我不需要转义它。 - 最后的
i
表示表达式将不区分大小写。 (将匹配IMG,IMG,IMG等) - 的
$1
的替代是指回()
部分我们前面记...它基本上采用任何被匹配那里,它扑通一声入$1
的地方
[a-z]将会错过5,最好使用简单的。+ – generalhenry 2010-11-12 07:09:01
@generalhenry:'。+?'你的意思是......否则它很贪婪,会吞噬一切。 – mpen 2010-11-12 07:12:02
我一直认为你必须在PHP正则表达式中使用分隔符。这段代码是否真的在运行?我没有安装PHP,所以我无法检查。 – 2010-11-12 07:16:15
试试这个代码:
<?php
$search = array(
'\[img:.+?\](.*?)\[\/img\]\'
);
$replace = array(
'<img src="\\2">'
);
$result = preg_replace($search, $replace, $string);
}
?>
我用preg_replace函数的阵列形式,好让你可以添加更多的搜索和未来的替代模式。我想你正在尝试替换一些BBCODE标签。网上有很多库可以正确处理BBCODE。
编辑
你的'$ search'永远不会匹配..你没有处理随机字符。还有,你回来了......从什么?这不是一个函数AFAIK。 – mpen 2010-11-12 07:13:07
$result = preg_replace('%\[img:[^]]+\]([^[]+)\[/img\]%', '<img src="\1">', $subject);
,或作为评论的正则表达式:
$result = preg_replace(
'%\[img: # match [img:
[^]]+ # match one or more non-] characters
\] # match ]
([^[]+) # match one or more non-[ characters
\[/img\] # match [/img]
%x',
'<img src="\1">', $subject);
[你不能解析与正则表达式BB代码(HTTP://科雷-nordmann.de/blog/do_NOT_parse_using_regexp.html)。使用[BBCode Parser](http://de2.php.net/manual/en/book.bbcode.php)。 – Gordon 2010-11-12 08:04:53