最近,我正在玩phpBB3中与BBCode相关的东西。当我追溯我的数据库,posts表和随机发布的帖子。我发现图像标记是以这样的方式编写的 [img:fcjsgy5j] 。每个帖子的 [img:...] 之间会产生8个随机字符。
[img:fcjsgy5j]http://imageurl.jpg[/img]
我的问题是,如何利用preg_replace()以这种方式替换随机字符..
<img src="http://imageurl.jpg">
答案 0 :(得分:4)
$output = preg_replace("`\[img:.+?\](.*?)\[/img\]`i", '<img src="$1"/>', $input);
[
开始一个字符集。我们不希望这样;我们希望匹配文字[
字符,因此我们必须使用\
.
匹配任何字符+
表示我们匹配前一个(任何字符)的一个或多个?
使前一个量词不合理(.+
会匹配所有内容,直到字符串的最后,这不是我们想要的,我们希望它尽可能少地匹配...直到下一个]
(.*?)
匹配[img]
标记之间的所有垃圾。再次不合适。我们在其周围放置()
以使其成为集合/
,但我更喜欢倒退,因为它很少出现在正则表达式中的任何位置,因此我不需要转义它。 i
表示表达式不区分大小写。 (将匹配img,IMG,ImG等)$1
会回到我们之前表示过的()
部分...它基本上取了那里匹配的内容,然后把它放到$1
的位置答案 1 :(得分:2)
$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);
答案 2 :(得分:0)
试试这段代码:
<?php
$search = array(
'\[img:.+?\](.*?)\[\/img\]\'
);
$replace = array(
'<img src="\\2">'
);
$result = preg_replace($search, $replace, $string);
}
?>
我使用了preg_replace的数组形式,以便将来可以添加更多搜索和替换模式。我想你正在尝试更换一些BBCODE标签。网上有很多库可以正确处理BBCODE。
被修改