You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MariaDB的REGEXP_SUBSTR提取wp_posts中图片src链接?

提取WordPress文章内容中的图片src链接(MariaDB)

问题说明

你当前使用的REGEXP仅用于筛选包含图片src的行,不会提取具体的链接值。要获取每行中所有图片的src地址,需要结合REGEXP_SUBSTR函数,针对单行多匹配的场景还需用递归CTE处理。

解决方案

1. 提取每行第一个图片src

如果只需要每行的首个图片链接,直接调用REGEXP_SUBSTR即可:

SELECT 
    ID,
    post_title,
    REGEXP_SUBSTR(post_content, 'src=["\']([^\'"]+)["\']', 1, 1, 'i', 1) AS first_image_src
FROM wp_posts
WHERE post_content REGEXP 'src=["\']([^\'"]+)["\']';
  • 参数解释:
    • 1, 1:从字段第1个字符开始,匹配第1个符合规则的结果
    • 'i':忽略大小写(可根据你的HTML代码大小写情况选择是否保留)
    • 1:返回正则表达式中第1个捕获组的内容(即括号内的src链接值)

2. 提取每行所有图片src(处理多匹配场景)

如果单篇文章包含多张图片,需要用递归CTE遍历所有匹配项:

WITH RECURSIVE image_srcs AS (
    SELECT 
        ID,
        post_title,
        post_content,
        1 AS match_num,
        REGEXP_SUBSTR(post_content, 'src=["\']([^\'"]+)["\']', 1, 1, 'i', 1) AS image_src
    FROM wp_posts
    WHERE post_content REGEXP 'src=["\']([^\'"]+)["\']'
    
    UNION ALL
    
    SELECT 
        ID,
        post_title,
        post_content,
        match_num + 1,
        REGEXP_SUBSTR(post_content, 'src=["\']([^\'"]+)["\']', 1, match_num + 1, 'i', 1) AS image_src
    FROM image_srcs
    WHERE image_src IS NOT NULL
)
SELECT ID, post_title, image_src
FROM image_srcs
WHERE image_src IS NOT NULL
ORDER BY ID, match_num;

该查询会递归提取每行的所有图片src,直到没有新的匹配项,最终返回所有行的完整图片链接列表。

正则表达式优化

你原有的src=["|\'](.*?)["|\']采用了非贪婪匹配,在MariaDB中更高效的写法是src=["\']([^\'"]+)["\']——直接匹配到下一个引号为止,避免不必要的回溯,提升查询性能。

内容的提问来源于stack exchange,提问作者user5853892

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:12:15