伏雨朝寒悉不胜,那能还傍杏花行。去年高摘斗轻盈。漫惹炉烟双袖紫,空将酒晕一衫青。人间何处问多情。 ———— 纳兰容若
昨天发的那篇三合一教程后来发现灯箱效果用正则处理以后就没有alt标签内容了网上找了很久也没找到全都是匹配src的费了好大功夫才找到一个完善可以用的在博客记录一下
$imgRegex='/<\s*img[\s\S]+?(?:src=[\'"]([\S\s]*?)[\'"]\s*|alt=[\'"]([\S\s]*?)[\'"]\s*|[a-z]+=[\'"][\S\s]*?[\'"]\s*)+[\s\S]*?>/i';
// 这里最重要的就是中间括号的非捕获部分。
// (?:src=[\'"]([\S\s]*?)[\'"]\s*|alt=[\'"]([\S\s]*?)[\'"]\s*|[a-z]+=[\'"][\S\s]*?[\'"]\s*)+
// 将src alt 列出来,同时将其他可能的属性也作为匹配
// src=[\'"]([\S\s]*?)[\'"]\s*
// alt=[\'"]([\S\s]*?)[\'"]\s*
// [a-z]+=[\'"][\S\s]*?[\'"]\s*
原文地址:https://vsmvc.com/p_5dd039a643cbed66c215e9e1
下面在Typecho上使用方法
独立版:
function parseContent($obj){
$options = Typecho_Widget::widget('Widget_Options');
$obj->content = preg_replace('/<\s*img[\s\S]+?(?:src=[\'"]([\S\s]*?)[\'"]\s*|alt=[\'"]([\S\s]*?)[\'"]\s*|[a-z]+=[\'"][\S\s]*?[\'"]\s*)+[\s\S]*?>/i','<a href="$1" data-title="$2" data-lightbox="roadtrip" /><img alt="$2" src="$1"></a>',$obj->content);
echo trim($obj->content);
}
三合一版:
function parseContent($obj){
$options = Typecho_Widget::widget('Widget_Options');
$patterns = array ('/<a href=\"([^\"]*)\">/i','/<\s*img[\s\S]+?(?:src=[\'"]([\S\s]*?)[\'"]\s*|alt=[\'"]([\S\s]*?)[\'"]\s*|[a-z]+=[\'"][\S\s]*?[\'"]\s*)+[\s\S]*?>/i','#\@\((.*?)\)#');
$replace = array ('<a href="\\1" target="_blank" class="post-diy" rel="nofollow">','<a href="$1" data-title="$2" data-lightbox="roadtrip" /><img alt="$2" src="$1"></a>','<img src="https://cdn.jsdelivr.net/gh/Seevil/R/G/IMG/bq/$1.png" class="bq">');
$obj->content = preg_replace('/<\s*img[\s\S]+?(?:src=[\'"]([\S\s]*?)[\'"]\s*|alt=[\'"]([\S\s]*?)[\'"]\s*|[a-z]+=[\'"][\S\s]*?[\'"]\s*)+[\s\S]*?>/i','<a href="$1" data-title="$2" data-lightbox="roadtrip" /><img alt="$2" src="$1"></a>',$obj->content);
echo trim($obj->content);
}
输出:
<?php parseContent($this); ?>
效果预览:
完美解决🎈