Heim  >  Artikel  >  Backend-Entwicklung  >  preg_replace替换内容中间部分

preg_replace替换内容中间部分

WBOY
WBOYOriginal
2016-08-08 09:26:191399Durchsuche

需求是这样:用正则匹配一个HTML文件中preg_replace替换内容中间部分标记中的图片地址

最初的实现:

$img = '<img  src="bbb.jpg"   style="max-width:90%" alt="preg_replace替换内容中间部分" >';
$newImg = preg_replace('/<img  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,对程序做个小改造就可以满足需求啦

$img = '<img  src="bbb.jpg"   style="max-width:90%" alt="preg_replace替换内容中间部分" >';
$newImg = preg_replace('/(<img  alt="preg_replace替换内容中间部分" >)/','$1aaa.jpg$3',$img);
echo $newImg;

preg_replace替换内容中间部分分为组3,同1

done

在手册中也说到这样一个问题,如果我们的aaa.jpg要更名为1.jpg 那么replacement就变成了$11.jpg$3,组1的名产生了歧义,办法就是改成${1}1.jpg${3},所以在实际应用中,无论会不会产生歧义,加上大括号更严谨些

以上就介绍了preg_replace替换内容中间部分,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn