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

如何在MySQL中查询包含YouTube视频链接的Post字段

解决方案

版本差异说明

  • MySQL 5.x 仅支持 POSIX 扩展正则表达式,不兼容PHP常用的PCRE语法特性(比如非捕获组、\d缩写、惰性匹配等),这是PHP正则无法直接在MySQL中复用的核心原因
  • MySQL 8.0及以上版本默认使用ICU正则库,兼容大部分PCRE语法,仅需少量调整即可使用

全版本通用查询语句(兼容所有MySQL版本)

以下写法适配所有MySQL版本,可以直接筛选出包含YouTube链接的Post字段:

SELECT Post FROM 你的表名 
WHERE Post REGEXP '(https?://)?(www\.)?(youtube\.com/watch\?v=|youtu\.be/)[[:alnum:]_-]{11}';

正则说明:

  • [[:alnum:]] 是POSIX正则中匹配字母数字的标准写法,等价于PCRE语法中的[a-zA-Z0-9]
  • YouTube视频ID固定为11位,仅由字母、数字、下划线、短横线组成,用[[:alnum:]_-]{11}可以精准匹配ID部分
  • 已覆盖带/不带http/https、带/不带www前缀、youtu.be短链接、youtube.com长链接的所有常见场景

MySQL 8.0专属优化写法

如果使用MySQL 8.0及以上版本,可以直接用接近PHP PCRE的简化写法:

SELECT Post FROM 你的表名 
WHERE Post REGEXP '(https?://)?(www\.)?(?:youtube\.com/watch\?v=|youtu\.be/)[\w-]{11}';

可选:查询同时提取视频ID

MySQL 8.0+可以配合REGEXP_SUBSTR函数,在筛选的同时直接提取出视频ID:

SELECT 
  Post,
  REGEXP_SUBSTR(Post, '(https?://)?(www\.)?(youtube\.com/watch\?v=|youtu\.be/)([[:alnum:]_-]{11})', 1, 1, 'c', 4) AS youtube_id
FROM 你的表名
WHERE Post REGEXP '(https?://)?(www\.)?(youtube\.com/watch\?v=|youtu\.be/)[[:alnum:]_-]{11}';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:27:09