您的位置:首页 > 编程语言 > PHP开发

php正则动态匹配 - 替代str_replace的数组替换

2013-10-23 18:29 519 查看
之前做的客户端接口中,有把表情图片转换为文字标签的操作,如

-> [大笑],是用的str_replace的数组替换,完后一天,域名变了,悲催了,因为有新旧数据的同时存在,如果延续之前的做法,肯定还要再搞一个数组,主要因为表情一共有100多个,我实在不想那么干(同时对于之前那么干过的同事无比膜拜),可是问题还是需要解决,开始往正则替换方向考虑,但是通常用正则替换是解决的类似这样的问题:

<?
//将src="/uploads/images/20100516000.jpg"替换为src="/uploads/uc/images/20100516000.jpg")
$str = "sdfsdfsfsfdfs<img width='123px' src='/uploads/images/20100516000.jpg' height='43px' />sdfsdfsfsdf";
echo preg_replace('/(<img[^>]+?src=[\"\']?[^>]+?)(images\/)([^>]+?\.(jpg|gif|bmp|bnp|png)[\"\']?[^>]+?>)/i',"\${1}uc/images/\${3}",$str);
?>


但是我要做的是类似把 <img width='123px' src='/uploads/images/face1.jpg' height='43px' />变成 [大笑] 的工作,仔细查看了一下表情的数据,发现了一个规律,表情图片链接地址的数字部分正好是标签数组的对应标签的下标,试想,如果能获取表情图片链接地址中的数字取出来作为标签数组下边,即可获取该表情图片的对应标签,我好像说的比较乱,实际情况是这样:

表情图片地址:
<img width='123px' src='/uploads/images/face0.jpg' height='43px' />
<img width='123px' src='/uploads/images/face1.jpg' height='43px' />
<img width='123px' src='/uploads/images/face2.jpg' height='43px' />
<img width='123px' src='/uploads/images/face3.jpg' height='43px' />
<img width='123px' src='/uploads/images/face4.jpg' height='43px' />
……

表情标签数组:
$biaoqing = array('[发呆]','[大笑]','[坏笑]','[撇嘴]','[可爱]'[b]……)[/b]

所以只要能够获取0,1,2,3,4;就能用$biaoqing[0],[b]$biaoqing[1],$biaoqing[2],$biaoqing[3],$biaoqing[4][/b]获取到标签

尝试一下:
preg_replace("/<img[^>]+src\=\"http:\/\/([^\">]+)\/face([\d]+).png\"([^>]+)\/>/",$biaoqing["\\2"],$content);

结果不起作用,心里哇凉哇凉的,但是总觉得这是一条可行之路,于是开始各种疯狂查,查手册,查案例,各种查,终于让我发现了伟大的修正符e,解决问题。

preg_replace("/<img[^>]+src\=\"http:\/\/([^\">]+)\/face([\d]+).png\"([^>]+)\/>/e",'$biaoqing["\\2"]',$content);
成功了,庆祝一下。

另一个关于静态化页面页码变换的正则:
地址类似于: http://www.tester.com/list/pr0-w0-f0-m0-or0-p0.html
执行正则如下:
<a href="'.preg_replace("/(p)(\d+)/e",'"\\1"."".("\\2"+1)',$link).'"><<上一页</a>

本文出自 “找啊找” 博客,请务必保留此出处http://searching.blog.51cto.com/7065945/1314082
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: