PHP 正则替换的问题
高洛峰
高洛峰 2016-10-27 09:48:36
[PHP讨论组]

俺的正则比较菜,现在有个正则替换的问题一直搞不定,需求是这样的:

一些内容里的标签

<p style="dsfdsf">(这里有任意内容和标签)<img class="sdfdsf" src="tupian.jpg">( 这里也有任意内容和标签)</p>

然后项替换成这样:

<p style="dsfdsf">(这里有任意内容和标签)( 这里也有任意内容和标签)</p><figure><img src="tupian.jpg" /></figure>

简单说就是img外面包上figure然后抽出来放到P后面,然后用preg_replace该怎么写呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
三叔

我可否理解为,

提取p下面的所有img标签到p外,如果是多个img,这个需要使用preg_match才行

并且p里面会有其他标签,除了p标签外

如果里面只有一个img

//正则
$p = '#

.*?)>(?.*?)(?\)(?.*?)

#is'; //替换 $r = '

$2$4

$3
'; //原内容 $s = '

fsdfsdfsfkolja;ad;lasd

'; echo preg_replace($p, $r, $s); // 结果: // 

fsdfsdfsfkolja;ad;lasd

有多个img

$s = '

fsdfsdfsfkolja;ad;lasd

asdaa

'; echo preg_replace_callback('#

.*?)>(?.*?)

#is', function($matches) {     preg_match_all('##is', $str = $matches[0], $matches1, PREG_OFFSET_CAPTURE );     foreach (array_reverse($matches1[0]) as $v)         $str = substr_replace($str, '', $v[1], strlen($v[0]));     return $str.'
'.implode('',array_map(function($v){return $v[0];}, $matches1[0])).'
'; }, $s); // 结果: // 

fsdfsdfsfkolja;ad;lasd

asdaa


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号