可说欢喜
Typecho分享发现

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

by 温柔, 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

完美解决🎈

PHPtypecho正则
温柔

作者: 温柔

4 条评论
    夏目贵志 回复
    夏目贵志2021-01-26 16:58

    https://img.gejiba.com/images/5d2312f40e80291902c78da89a74736b.png

    我当初是这么搞的

      夏目贵志 回复
      夏目贵志2021-01-27 17:55

      怎么找不到 回复你的地方

      我今天也换 你这个版本了 很强 哈哈!!

      @夏目贵志
        Intern 回复
        Intern MOD2021-01-30 22:07

        我把评论层级设置为2层了,刚刚改了下改为3层。

        @夏目贵志
      Intern 回复
      Intern MOD2021-01-26 17:00

      https://www.krsay.com/typecho/typecho-code-posturl-img-bq.html
      😃我之前也用的是这个方法~

      @夏目贵志
2024 © typecho & elise