需求是这样:用正则匹配一个html文件中标记中的图片地址
最初的实现:
$img = '<img src="bbb.jpg" style="max-width:90%" alt="preg_replace替换内容中间部分" >';
$newImg = preg_replace('/<img s+src=['"].*?['"].* alt="preg_replace替换内容中间部分" >/i','<img src="aaa.jpg" style="max-width:90%" alt="preg_replace替换内容中间部分" >',$img);
echo $newImg;这样虽然没有问题,但是不符合我最初的想法,我的想法是只替换src里的内容,保留左右两边的标签及属性。
看手册,对preg_replace()中第二个参数有这样的描述:
replacement中可以包含后向引用\n 或(php 4.0.4以上可用)$n,语法上首选后者。每个这样的引用将被匹配到的第n个捕获子组捕获到的文本替换。 n 可以是0-99,\0和$0代表完整的模式匹配文本。 捕获子组的序号计数方式为:代表捕获子组的左括号从左到右, 从1开始数。
“翻译”成菜鸟语言就是正则表达式中的每个组可以在该参数中用\n或者$n代替
OK,对程序做个小改造就可以满足需求啦
保君发免费网站系统使用说明:一、 本程序完全免费,并且,保证功能全部可以使用,且无后门及木马等,请放心使用。二、 如果发现问题,请及时联系我们,我们会义务尽力解决所反映的问题。或到本公司网站下载更新程序。三、 修改三个文件就能成为自己的网站:1、顶部图片LOGO.GIF,2、替换透明动画:LOGO.SWF,3、修改#sys123.asp中的内容为你想要的内容。
$img = '<img src="bbb.jpg" style="max-width:90%" alt="preg_replace替换内容中间部分" >';
$newImg = preg_replace('/(<img s+src=['"])(.*?)(['"].* alt="preg_replace替换内容中间部分" >)/','$1aaa.jpg$3',$img);
echo $newImg;将
分为组3,同1
done
在手册中也说到这样一个问题,如果我们的aaa.jpg要更名为1.jpg 那么replacement就变成了$11.jpg$3,组1的名产生了歧义,办法就是改成${1}1.jpg${3},所以在实际应用中,无论会不会产生歧义,加上大括号更严谨些
以上就介绍了preg_replace替换内容中间部分,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。









