【问题标题】:YouTube video regex in MySQL queryMySQL 查询中的 YouTube 视频正则表达式
【发布时间】:2018-04-23 18:28:31
【问题描述】:

我在 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);

但它不起作用。

【问题讨论】:

  • @tung 如果我在 PHP 中运行正则表达式,它可以正常工作,但 MySQL 查询不返回任何记录。错误是常规表达式,因为例如我执行WHERE message REGEXP 'youtube\.com' 它可以工作。
  • here获取它。
  • @WiktorStribiżew 非常感谢!看来它有效。

标签: php mysql regex


【解决方案1】:

你可以使用

REGEXP '^(https?://)?(www[.])?(m[.])?(youtu[.]be/|youtube[.]com/((watch)?[?](.*&)?vi?=|(embed|v|vi|user)/))[^?&\"''>]+'

重点是:

  • 将所有非捕获组替换为捕获
  • 不要转义/,因为它们不是特殊的正则表达式元字符
  • 在单个字符周围使用 [] 会更容易,以防您不确定应该如何转义它们
  • 要定义单引号,您需要在 MySQL 字符串文字中使用双单引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2012-07-11
    • 1970-01-01
    • 2020-12-21
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多