preg_replace不能正常工作?

时间:2011-09-12 21:16:45

标签: php preg-replace

在我的论坛上传图片时,会获得以下html:

<a target="_blank" href="attachment.php?aid=1" rel="nofollow">zebra.bmp</a>

为了使用我安装的插件,我需要匹配那些类型的html并将其更改为:

<a href="attachment.php?aid=1" rel="fancyzoom">zebra.bmp</a>

在插件上它已经进行了一些转换,例如:

$page=preg_replace('/\<a rel="nofollow" href="attachment.php\?aid=([0-9]+)" target="_blank"\>\<img/Usi','<a href="attachment.php?aid=$1" rel="fancyzoom"><img',$page);

现在我想抓住我在问题开头发布的html

$page=preg_replace('/\<a target="_blank" href="attachment.php\?aid=([0-9]+)" rel="nofollow"\>([a-zA-Z0-9_- ]+)\.(jpg|jpeg|gif|png|bmp|tif|tiff)\<\/a\>/Usi','<a href="attachment.php?aid=$1" rel="fancyzoom">$2.$3</a>',$page);

但上面似乎没有用,是因为OR括号? 有没有办法进行这样的替换,我只想要以上面的图像扩展名结尾的文件?

2 个答案:

答案 0 :(得分:2)

你只需要逃避减号:

$page=preg_replace('/\<a target="_blank" href="attachment.php\?aid=([0-9]+)" rel="nofollow"\>([a-zA-Z0-9_\- ]+)\.(jpg|jpeg|gif|png|bmp|tif|tiff)\<\/a\>',$page);

另见demo

=== UPDATE ===

$page=preg_replace('/\<a.*?href="attachment.php\?aid=([0-9]+)".*?\>([a-zA-Z0-9_\- ]+)\.(jpg|jpeg|gif|png|bmp|tif|tiff)\<\/a\>/Usi','<a href="attachment.php?aid=$1" rel="fancyzoom">$2.$3</a>',$page);

我的新demo

答案 1 :(得分:0)

这样就够了吗?

\<a target="_blank" href="attachment.php\?aid=([0-9]+)" rel="nofollow"\>[a-zA-Z0-9_-]*.(jpg|jpeg|gif|png|bmp|tif|tiff)\<\/a\>

+是此语法中的问题