如何用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
相关产品推荐
相关产品推荐

