我有以下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/

10-12 12:49
查看更多