代码:
// 内容:$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. python - argparse 模块学习

    python - argparse 模块学习 设置一个解析器 使用argparse的第一步就是创建一个解析器对象,并告诉它将会有些什么参数.那么当你的程序运行时,该解析器就可以用于处理命令行参数. 解 ...

  2. python读取配置文件&&简单封装

    之前有做过把爬虫数据写到数据库中的练习,这次想把数据库信息抽离到一个ini配置文件中,这样做的好处在于可以在配置文件中添加多个数据库,方便切换(另外配置文件也可以添加诸如邮箱.url等信息) 1.co ...

  3. maven的安装以及问题

    https://blog.csdn.net/machao0903/article/details/73368909https://www.cnblogs.com/jiejiecool/p/421885 ...

  4. So you want to be a computational biologist?

    So you want to be a computational biologist? computational biology course

  5. LeetCode--409--最长回文串

    问题描述: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意: 假设字 ...

  6. 使用Vue建立一个在线商店

    git代码:https://github.com/chentianwei411/vue-router-demo.git 使用Vue-CLI3 webpack, ESLInt, Vuex, vue-ro ...

  7. p1217 Prime Palindromes

    1.回文质数的数量很少 2.除了11以外的回文质数都是偶数. 3.1-1亿内的回文数不到30000个. 4.1-10000的质数约1000个. 这样深搜找出所有的回文数,再判断是否质数. #inclu ...

  8. Creating a Hadoop-2.x project in Eclipse

    Creating a Hadoop-2.x project in Eclipse hortonworks:MapReduce Ports http://docs.hortonworks.com/HDP ...

  9. apicloud 聊天输入框模块UIChatBox

    点击链接查看详情 https://docs.apicloud.com/Client-API/UI-Layout/UIChatBox 模板中包括,聊天输入框,表情,发送图片,还有拍照,录音,其中也可以放 ...

  10. 5月21 练习AJAX的查看详细及批量删除

    老师讲过之后的复习: 显示数据的代码部分: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...