【发布时间】:2012-07-17 13:42:41
【问题描述】:
我制作了一个自定义函数,其作用类似于 bbCode。我正在使用 preg_replace 和正则表达式。唯一的问题是,如果我使用不止一种 bbCode 格式,那么只有一种有效..
[align=center][img]myimagelink[/img][/align]
如果我输入此行,则图像会出现,但 [align=center]image[/align] 也会出现。如何避免这个问题?
$patterns[2] = '@\[align=(.*)\](.*)\[\/align\]@si';
$patterns[9] = '@\[img\](.*\.jpg)\[\/img\]@si';
$replacements[2] = '<table align=\1><tr><td align=\1>\2</td></tr></table>';//ALIGN
$replacements[9] = '<img src=\"$1\"/>';//image
【问题讨论】:
-
你的模式是贪婪的,所以
[align]会匹配[align=something[/align][/align]这样的东西。 -
我会按原样搜索和替换图像,但是像 'align' 这样的成对标签作为单曲,即将 [align=center] 和 [/align] 视为单独的实体。所以替换不会包含标签之间的代码