你全力做到最好,可能还不如别人随便搞搞!

发掘积累过程的快感

首页 » BIBLE模型 » 编程思想 » 同时匹配img标签中的src和alt的正则表达式

同时匹配img标签中的src和alt的正则表达式


做内容发布系统的时候,需要将发布的文章中的远程图片做本地缓存处理,那么这就涉及到使用正则表达式来匹配 img 标签中的 src 属性和 alt 属性等。
img 标签中的属性顺序不固定,因此不能使用常见的顺序匹配,这里就需要一个兼容所有可能的正则表达式,具体请看下方代码。

$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*

上面的正则表达式即可匹配无顺序的 img 标签中的 src 属性和 alt 属性

测试用例

<?php
    $str="<img src='/img1' alt='fadsf'>";
    $str2="<img alt='fadsf' src='/img2'>";
    $imgRegex='/<\s*img[\s\S]+?(?:src=[\'"]([\S\s]*?)[\'"]\s*|alt=[\'"]([\S\s]*?)[\'"]\s*|[a-z]+=[\'"][\S\s]*?[\'"]\s*)+[\s\S]*?>/i';
    preg_match($imgRegex,$str,$matcher);
    preg_match($imgRegex,$str2,$matcher2);
    print_r($matcher);
    print_r($matcher2);

输出结果

Array
(
    [0] => <img src='/img1' alt='fadsf'>
    [1] => /img1
    [2] => fadsf
)
Array
(
    [0] => <img alt='fadsf' src='/img2'>
    [1] => /img2
    [2] => fadsf
)

互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼。 “Bible”是圣经,有权威的书,我们的本意就是为开发者提供真正有用的的资料。 我的电子邮件 1217179982@qq.com,您在开发过程中遇到任何问题,欢迎与我联系。
Copyright © 2024. All rights reserved. 本站由 Helay 纯手工打造. 蜀ICP备15017444号