在 PHP 中编写正则表达式以用 <a> 包装 <img> [重复]
Posted
技术标签:
【中文标题】在 PHP 中编写正则表达式以用 <a> 包装 <img> [重复]【英文标题】:Writing regular expression in PHP to wrap <img> with <a> [duplicate] 【发布时间】:2011-05-26 07:15:59 【问题描述】:我想这样做,以便任何出现的图像都被包含到图像源的链接
我如何在 php 中编写一个模式,以便我可以找到这些变化,这些变化分散在来自数据库的文本中:
<img src='/dir/dir2/image1.jpg' alt='blah blah blah'>
<img src="/dir/dir2/image2.jpg" />
<img src="/dir/dir2/image3.jpg" />
在所有情况下,我都希望它们出现在链接中。
【问题讨论】:
所以您将<img src="A"/>
转换为<a href="A"><img src="A"/></a>
?
必填:***.com/questions/1732348/… :) (在你的情况下它可能是可以管理的,但 Cthulu 仍然适用。)
【参考方案1】:
preg_replace("<img\\s*(.*?)src=('.*?'|\".*?\"|[^\\s]+)(.*?)\\s*/?>ims", '<a href=$2><img $1src=$2 $3/></a>', $str)
处理所有非实际案例
【讨论】:
谢谢SHINKiROU,你是我的英雄 啊啊啊啊!!!基于正则表达式的 html 解析! You dare violate the rules of bobince 被窃听,正则表达式方法必然如此。此正则表达式在<img data-license-src="foo.com/LICENSE" src="foo.com/img1.png"/>
上失败,它将链接到 Liecense 而不是图像。说真的,使用一个可怕的 html 解析器,比如 DOMDocument。【参考方案2】:
我推荐使用 loadHTML()
而不是正则表达式的 PHP DOM?
http://php.net/dom
http://php.net/domdocument.loadhtml
【讨论】:
这些网站很好用。【参考方案3】:我可以推荐使用 jQuery 并改用这个 sn-p,它应该更容易(我们都喜欢 jQuery 暴力破解任何问题;]
)
$('img').wrap( function() return '<a href="' + this.src + '"></a>'; );
还是
$('img').wrap( function() return '<a href="' + $(this).attr('src') + '"></a>'; );
不管怎样,玩得开心,使用 jQuery 来操作 DOM 客户端 ;)
【讨论】:
我赞成其他两个实际使用 PHP 来解决问题,但说真的,像这样的 DOM 元素包装在 jQuery 中非常简单,您需要很少的努力,并且允许您更多如果您突然决定……例如,标题图像……不需要选择,请密切关注要“更改”的区域。我并不是说我的方法一定是要走的路,只是指出笨拙的解决方案有一些好处。 相关:jQuery以上是关于在 PHP 中编写正则表达式以用 <a> 包装 <img> [重复]的主要内容,如果未能解决你的问题,请参考以下文章
php 正则匹配HTML标签以外的匹配词 并且不匹配A标签中的匹配词