请问php正则如何去掉获得img标签中的 border属性,譬喻:<img src="http://enenba.com/test.gif" alt="test1" /> 替换后的 <img src="http://enenba.com/test.gif" alt="test1" />
一开始我就想到要 只去掉border="" 很简朴的写出
$search = '/(<img.*?)(border=".*?")([^>]+\/?>)/is';它只能去掉形如<img src="http://enenba.com/囧1" />这样的border,一般的 <img>标签会有这样几种含有boder的环境
<img src="http://enenba.com/囧1" />
<img src='http://enenba.com/囧1' />
<img src=http://enenba.com/囧1 border=囧2 />
也就是有切合w3c尺度的双引号,尚有不切合w3c尺度单引号,无引号的环境。想要把他们的border也去掉
于是改成以下的正则:
$search = '/(<img.*?)border=(["\']).*?\2([^>]+>)/is';此正则只能办理有单、双引号的border,临时没有办理无引号的
归去翻了以前的文章《获取<a>链接标签。从Snoopy类中提取函数》
看了正则还支持三目运算: (xxx)? (?(分组号) yyy|zzz) 假如xxx不为空 执行yyy,不然执行zzzz
于是改成了此完美最终版本:
$search = '/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';终于办理问题了,上一个php例子吧
<?php //php过滤img标签中的 border属性 $str = ' 1、<img src="http://enenba.com/test1.jpg" /> 2、<img src=http://enenba.com/\'test2.jpg\' border=http://enenba.com/\'2\' /> 3、<img src=http://enenba.com/test3.jpg border=3 /> '; $search = '/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is'; $r = preg_replace($search,'$1$3',$str); highlight_string($r); //输出: /* 1、<img src="http://enenba.com/test1.jpg" /> 2、<img src='http://enenba.com/test2.jpg' /> 3、<img src=http://enenba.com/test3.jpg /> */ ?>过滤后只是多了一个空格,也没干系了,已包办理问题了。
enenba原创,转载请保存出处:?post=164
end..
附件下载/演示源码:
【 remove-border.htm 】 9.81KB
分享到: 更多
相关日志:
匹配一个<table>并过滤中间table
从《网页降噪助你晋升搜索引擎表示》来做php正文提取算法
正则用(?>…)实现固化分组提高效率
php截取字符串中的链接参数
PHP收罗类Snoopy伪造来历,IP
editplus 批量删除英文单词之间的空格
正则高级能力之三目运算
常用数字类正则
如何用php正则表达式获得网页上所有的链接
评论:
thisisgame 2012-08-14 11:58正则
没有用心去学……
所以不会用
enenba 2012-08-14 12:13
不必然要会正则。你用别人写好的就行了。
Sogei 2012-05-21 05:50
多谢了~~大神真锋利 ^_^
enenba 2012-05-19 18:49
在Emlog的模板中本来是这样输出正文内容,
<?php echo $log_content; ?>
可以改成这样去掉图片的border:
<?php
$search = '/(<img.*?)border=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';
echo preg_replace($search,'$1$3',$log_content);
?>
sogei 2012-05-19 23:53
小白再求解,输出正文内容的代码我已经改成了<?php get_content_img($value['content']); ?>
这个是获取日志缩略图的,不影响成果的前提下怎么改