在PHP中需要有关REGEX的帮助。一个简单的。救命!

时间:2010-11-12 07:02:59

标签: php regex

最近,我正在玩phpBB3中与BBCode相关的东西。当我追溯我的数据库,posts表和随机发布的帖子。我发现图像标记是以这样的方式编写的 [img:fcjsgy5j] 。每个帖子的 [img:...] 之间会产生8个随机字符。

[img:fcjsgy5j]http://imageurl.jpg[/img]

我的问题是,如何利用preg_replace()以这种方式替换随机字符..

<img src="http://imageurl.jpg">

3 个答案:

答案 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。

被修改

喜欢这个: http://php.net/manual/en/book.bbcode.php