正则:img的url,width,height 和 a标签的url以及替换
代码:
// 内容:$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以及替换的更多相关文章
- client/scroll/offset width/height/top/left ---记第一篇博客
client/scroll/offset width/height/top/left (盒模型为contentBox,定位原点是元素左上角边框最外层的交点) clientWidth width+左p ...
- as3:sprite作为容器使用时,最好不要指定width,height
除 TextField 和 Video 对象以外,没有内容的显示对象(如一个空的 Sprite)的高度为 0,即使您尝试将 height 设置为其它值,也是这样. 如果您设置了 height 属性,则 ...
- offset[Parent/Width/Height/Top/Left] 、 client[Width/Height/Top/Left] 、 Element.getBoundingClientRect()
开篇提示:以下内容都经个人测试,参考API文档总结,但还是不能保证完全正确,若有错误,还请留言指出___________________________________________________ ...
- ffmpeg按比例缩放--"width / height not divisible by 2" 解决方法
最近在处理视频的时候,有这么一个需求 如果视频的分辨率宽度大于960的话,就把宽度设为960,而高度按其比例进行缩放 如果视频的分辨率高度大于540的话,就把高度设为540,而宽度按其比例进行缩放 之 ...
- 如何理解VB窗体中的scale类属性及width height属性之间的关系
如何理解VB窗体中的scale类属性及width height属性之间的关系 VB中的SCALEHIEGT,SCALEWIDTH,与窗体中的WIDTH,HEIGHT的区别及关系是许多VB初学者难以理解 ...
- css 行内元素 块元素 替换元素 非替换元素 以及这些元素的width height margin padding 特性
一.各种元素的width height margin padding 特性(具体css元素的分来参看二) 1.块级元素 width. height. margin的四个方向. padding的四个方向 ...
- struts2 标签 --<<s:url >
Struts2中的链接标签 <s:url>和<s:a> 普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page conten ...
- Struts2中的链接标签 <s:url>和<s:a>---在action中获取jsp表单提交的参数(转)
转自:http://sgl124764903.iteye.com/blog/444183 1.普通链接 Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp. <%@ page ...
- URL传值问题,不同浏览器对URL的长度要求
通过URL传值的问题,所以对url字符串进行encodeURIComponent对url字符串内容进行编码,问题解决,但是有时候会出现 The request filtering module is ...
随机推荐
- SVN下载项目导入到eclipse中出现错误解决办法:
首先要确定settings.xml配置路径正确 (下面是我自己的路径,设置自己的路径) 用客户端暴力解决方法: 1)把本地中工作空间中内容删除重新下载 2)导入到eclipse中 会出现一些问题 右键 ...
- fiddler学习笔记&&基本使用
周末在网上找了些fiddler相关的资料来看,学习下如何使用这个工具(平时接口测试用得比较多,在没有接口文档的情况下,可以通过抓包工具来提取需要测试的接口,ps.好久没写博客了,争取5月结束前再写2篇 ...
- (转).Net中自定义类作为Dictionary的key详解
在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...
- eQTL | Expression quantitative trait loci | 数量性状位点 | 表达数量性状基因座
一篇通俗的文章:eQTL Expression quantitative trait loci (eQTLs) are genomic loci that explain all or a fract ...
- 守护进程函数——内部的小范围try catch 增强了 while死循环执行的 可靠性
void Watch() { try { LogHelper.WriteLog("WatchServi ...
- 自定义广播(BroadcastReceiver)事件 --Android开发
本例演示自定义广播事件.我们需要做的是,在主活动中写发送广播的代码,然后在接收广播的类中写接收广播的代码. 1.主活动中点击按钮后发送广播 MainActivity.java: public clas ...
- jq 倒计时
引入jq 注 在IE和safari 如果时间出现NAN 将时间格式改为YYYY/MM/DD HH:MM:SS 例:var d2 = new Date("2019/02/18 15:59&qu ...
- 373. Find K Pairs with Smallest Sums (java,优先队列)
题目: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Def ...
- 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上
总结一下相关概念: torch.Tensor - 一个近似多维数组的数据结构 autograd.Variable - 改变Tensor并且记录下来操作的历史记录.和Tensor拥有相同的API,以及b ...
- Thymeleaf使用bootstrap及其bootstrap相关插件(一)
Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 在完成信息录入界面 ...