Typecho,分享发现

Typecho PHP正则提取img标签src和alt

by Intern, 2020-12-29


昨天发的那篇三合一教程后来发现灯箱效果用正则处理以后就没有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); ?>

效果预览:

PHP正则提取img标签src和alt

完美解决🎈

PHP typecho 正则
Intern

作者: Intern

2021 © typecho & xingr