在我的论坛上,上传图像时将获得以下 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 括号的原因吗? 有没有办法在我只想要以上述图像扩展名结尾的文件的情况下进行此类替换?
你只需要逃避减号:
$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);
另请参阅我的演示。
===更新===
$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);
我的新演示。
这样就够了吗?
\<a target="_blank" href="attachment.php\?aid=([0-9]+)" rel="nofollow"\>[a-zA-Z0-9_-]*.(jpg|jpeg|gif|png|bmp|tif|tiff)\<\/a\>
+ 是这个语法中的问题