preg_replace图像大小bb标记

时间:2014-02-22 10:16:18

标签: php regex image preg-replace bbcode

我正在尝试制作一个可以设置图像大小和对齐的bb标签。 喜欢:[img=width:hight|alignment]image[/img]

我目前有这个,但它只看到\ 4并忽略其余部分。

$txt = preg_replace("#\[img=(.*?):(.*?)|(.*?)\](.+?)\[/img\]#is", "<a href=\"\\4\"><img src=\"\\4\" width=\"\\1 px\" height=\"\\2 px\" style=\"float: \\3 ; margin-right: 10px;\" /></a>", $txt);

它高于lorem ipsum代码:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pulvinar dapibus massa sed dapibus. Morbi cursus ipsum sit amet luctus facilisis. Donec sodales metus eu neque aliquam, aliquam eleifend felis hendrerit. Aliquam placerat, massa vel interdum ultrices, urna lectus posuere leo, in lacinia nibh felis venenatis neque. Vivamus vel volutpat sapien. Suspendisse potenti. Integer ac dapibus leo, at iaculis augue. Maecenas in orci consectetur arcu lacinia mattis nec et leo.
[img=100:200|left]images/galaxy.jpg[/img]
Donec ac tristique urna, eu tempus mauris. Sed id tellus varius, lobortis purus nec, volutpat massa. Ut venenatis sed nisi aliquet elementum. Donec rhoncus euismod erat sit amet vulputate. Suspendisse vitae orci sit amet orci pulvinar porttitor. Praesent viverra tortor id metus ornare, sit amet eleifend risus volutpat. Cras ac augue nec lorem pellentesque varius. Sed et nibh non justo hendrerit pretium. Aliquam egestas vitae arcu at ornare. Donec at fringilla leo. Nam condimentum lorem massa. Fusce non arcu pharetra, imperdiet justo at, molestie quam.

这给出了:

<a href="images/galaxy.jpg"><img src="images/galaxy.jpg" width=" px" height=" px" style="float: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pulvinar dapibus massa sed dapibus. Morbi cursus ipsum sit amet luctus facilisis. Donec sodales metus eu neque aliquam, aliquam eleifend felis hendrerit. Aliquam placerat, massa vel interdum ultrices, urna lectus posuere leo, in lacinia nibh felis venenatis neque. Vivamus vel volutpat sapien. Suspendisse potenti. Integer ac dapibus leo, at iaculis augue. Maecenas in orci consectetur arcu lacinia mattis nec et leo.<br />
[img=100:200|left ; margin-right: 10px;" /></a>
Donec ac tristique urna, eu tempus mauris. Sed id tellus varius, lobortis purus nec, volutpat massa. Ut venenatis sed nisi aliquet elementum. Donec rhoncus euismod erat sit amet vulputate. Suspendisse vitae orci sit amet orci pulvinar porttitor. Praesent viverra tortor id metus ornare, sit amet eleifend risus volutpat. Cras ac augue nec lorem pellentesque varius. Sed et nibh non justo hendrerit pretium. Aliquam egestas vitae arcu at ornare. Donec at fringilla leo. Nam condimentum lorem massa. Fusce non arcu pharetra, imperdiet justo at, molestie quam.

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您必须转义管道符|

$txt = preg_replace("#\[img=(.*?):(.*?)\|(.*?)\](.+?)\[/img\]#is", 
    '<a href="$4"><img src="$4" width="$1 px" height="$2 px" style="float:$3; margin-right: 10px;" /></a>', 
$txt);

并且还使用$n代替\n,第二个保留用于正则表达式,前者用于替换。