mySQL 和 MariaDB 中的正则表达式给出不同的结果

regex in mySQL and MariaDB give different results

我正在将我的 MariaDB 迁移到 MySQL 并且遇到了差异。

我有一个非常简单的查询,它在 Maria DB 中生成结果 (197),但在 mySQL 中生成结果为零,有人能帮忙吗?

SELECT DISTINCT title FROM films where title REGEXP 'The \w{4}[^\s]*\b'

数据库完全相同(从 MariaDB 导出到 MySQL 没有任何问题)。

在 MySQL 5.7 中,您必须使用类似 POSIX 的正则表达式库并使用

SELECT DISTINCT title FROM films where title REGEXP 'The [[:alnum:]_]{4}[^[:space:]]*[[:>:]]'

另外注意这里的正则匹配是不区分大小写的,如果你需要让The只匹配The而不匹配THE,你需要加上BINARY 关键字在 REGEXP.

之后

这里,

  • [[:alnum:]_]{4} - \w{4} - 四字字符、字母、数字或下划线
  • [^[:space:]]* - \S* - 零个或多个非空白字符
  • [[:>:]] - \b(?!\w) - 右手(尾随)单词边界