我有以下PHP正则表达式,用于验证YouTube视频的url:
preg_match('/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"\'>]+)/', $message)
我需要在MySQL中实现相同的正则表达式,以便:
$posts = mysql_query("
SELECT *
FROM posts
WHERE message REGEXP '^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"\'>]+)'
", $connection);
但它不起作用。
最佳答案
你可以用
REGEXP '^(https?://)?(www[.])?(m[.])?(youtu[.]be/|youtube[.]com/((watch)?[?](.*&)?vi?=|(embed|v|vi|user)/))[^?&\"''>]+'
重点是:
将所有非捕获组替换为捕获
不要转义
/
,因为它们不是特殊的regex元字符在单个字符周围使用
[]
更容易,以防您不确定如何转义它们要定义单引号,需要在MySQL字符串文本中使用双单引号。
关于php - MySQL查询中的YouTube视频正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49987693/