首页 > 解决方案 > mySQL 和 MariaDB 中的正则表达式给出不同的结果

问题描述

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

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

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

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

标签: mysqlregexmariadbcompatibility

解决方案


在 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)- 右手(尾随)单词边界

推荐阅读