代码:
// 内容:$detail['content']
//img的url,width,height
$img = array();
$matches = array();
$regeImg = '/<img.+src=\"?(.+(jpg|gif|bmp|bnp|png))\"?.+width=\"?(\d*)\"?.+height=\"?(\d*)\"?.+>/i';
if(preg_match_all($regeImg, $detail['content'], $matches)){
//$matches[1] url ;$matches[3] width ;$matches[4] height
foreach($matches[1] as $k=>$v){
$img[$k]['ref'] = "<!--IMG#".$k."-->";
$img[$k]['src'] = $v;
$img[$k]['alt'] = '';
$img[$k]['width'] = $matches[3][$k];
$img[$k]['height'] = $matches[4][$k];
}
}
//a标签
$link = array();
$regA= '/<a.*href="(.*)".*>(.*)</isU';
$aList = array();
if(preg_match_all($regA, $detail['content'], $aList)){
//$aList[1] url ;$aList[2] content
foreach($aList[1] as $k=>$v){
$link[$k]['ref'] = "<!--link".$k."-->".$aList[2][$k];
$link[$k]['title'] = $aList[2][$k];
$link[$k]['url'] = $v;
}
}
//替换img标签
$str = "";
$regReplaceImg = '/<img.+src=\"?(.+(jpg|gif|bmp|bnp|png))\"?.+width=\"?(\d*)\"?.+height=\"?(\d*)\"?.+?(?=\/)?(>)?/i';
foreach($img as $k=>$v){
if($k == 0){
$content = $detail['content'];
$str = $this->replace($regReplaceImg,"<!--IMG#".$k."-->",$content);
}else{
$str = $this->replace($regReplaceImg,"<!--IMG#".$k."-->",$str);
}
}
//替换a标签
$body = '';
$regPeplaceA = '/<a.*href="(.*)".*>(.*)<\/a>/isU';
foreach($link as $k=>$v){
if($k == 0){
$body = $this->replace($regPeplaceA,$v['ref'],$str);
}else{
$body = $this->replace($regPeplaceA,$v['ref'],$body);
}
} //替换
public function replace($reg,$replace,$con){
$str = preg_replace($reg,$replace, $con,1);
return $str;
} 打印出来的json数据:


  

正则:img的url,width,height 和 a标签的url以及替换的更多相关文章

  1. client/scroll/offset width/height/top/left ---记第一篇博客

    client/scroll/offset width/height/top/left (盒模型为contentBox,定位原点是元素左上角边框最外层的交点) clientWidth  width+左p ...

  2. as3:sprite作为容器使用时,最好不要指定width,height

    除 TextField 和 Video 对象以外,没有内容的显示对象(如一个空的 Sprite)的高度为 0,即使您尝试将 height 设置为其它值,也是这样. 如果您设置了 height 属性,则 ...

  3. offset[Parent/Width/Height/Top/Left] 、 client[Width/Height/Top/Left] 、 Element.getBoundingClientRect()

    开篇提示:以下内容都经个人测试,参考API文档总结,但还是不能保证完全正确,若有错误,还请留言指出___________________________________________________ ...

  4. ffmpeg按比例缩放--"width / height not divisible by 2" 解决方法

    最近在处理视频的时候,有这么一个需求 如果视频的分辨率宽度大于960的话,就把宽度设为960,而高度按其比例进行缩放 如果视频的分辨率高度大于540的话,就把高度设为540,而宽度按其比例进行缩放 之 ...

  5. 如何理解VB窗体中的scale类属性及width height属性之间的关系

    如何理解VB窗体中的scale类属性及width height属性之间的关系 VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解 ...

  6. css 行内元素 块元素 替换元素 非替换元素 以及这些元素的width height margin padding 特性

    一.各种元素的width height margin padding 特性(具体css元素的分来参看二) 1.块级元素 width. height. margin的四个方向. padding的四个方向 ...

  7. struts2 标签 --<<s:url >

    Struts2中的链接标签 <s:url>和<s:a> 普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page conten ...

  8. Struts2中的链接标签 <s:url>和<s:a>---在action中获取jsp表单提交的参数(转)

    转自:http://sgl124764903.iteye.com/blog/444183 1.普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page ...

  9. URL传值问题,不同浏览器对URL的长度要求

    通过URL传值的问题,所以对url字符串进行encodeURIComponent对url字符串内容进行编码,问题解决,但是有时候会出现 The request filtering module is ...

随机推荐

  1. spring aop通过注解实现日志记录

    首先是几个概念:连接点(Joinpoint).切点(Pointcut).增强(Advice).切面(Aspect) 另外也要使用到注解. 需求:通过注解定义LogEnable.然后程序运行能够识别定义 ...

  2. SVN图标各种标注

    黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人 ...

  3. Cisco 设备设置监控口

    > enable                 # 从用户模式进入特权模式# show ip int bri     # 查看当前所有端口状态 # conf t                ...

  4. English trip V1 - 9.Do you Ever Say Never? 你有没有说永远不会? Teacher:Lamb Key: Adverbs of frequency (频率副词)

    In this lesson you will learn to describe what you do at home. 在本课中,您将学习如何描述您在家中所做的事情. 课上内容(Lesson) ...

  5. 分享基于EF+WCF的通用三层架构及解析

    本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务调用及一个分页的实例. 1. 项目架构图: ...

  6. ionic3 打包一个已签名的apk

    1 进入ionic官方文档,点击左边导航菜单,找到INTRO下的Deploying2 终端进入项目目录(根据项目环境定是否需要root权限)3 运行命令ionic cordova build andr ...

  7. hdu-1115 计算几何 求重心 凸多边形 面积

    思想是分割成三角形,然后求三角形的重心.那么多边形重心就是若干个三角形的重心带权求中心,可以用质点质心公式. #include <cstdio> #include <iostream ...

  8. Symmetric Tree leetcode java

    问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...

  9. 【PowerDesigner】【8】把Comment复制到name中和把name复制到Comment

    原因:这两个字段的值很多时候其实是一样的,重写很麻烦 步骤:打开菜单Tools>Execute Commands>Edit/Run Script.. 或者用快捷键 Ctrl+Shift+X ...

  10. PyCharm + PyQt4 环境搭建

    一.准备工作 下载pycharm 和 pyqt4 (百度下就有) pyqt4安装好后,在C:\Python27\Lib\site-packages\PyQt4 路径下会有designer.exe ,这 ...