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

 之前做的客户端接口中,有把表情图片转换为文字标签的操作,如 j_0058.gif -> [大笑],是用的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('[发呆]','[大笑]','[坏笑]','[撇嘴]','[可爱]'……)


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


 尝试一下:

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).'">&lt;&lt;上一页</a>


你可能感兴趣的:(PHP,数组,动态,匹配)