mysql - mySQL 和 MariaDB 中的正则表达式给出不同的结果
问题描述
我正在将我的 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)
- 右手(尾随)单词边界
推荐阅读
- python - 如何在 python 文件中设置小部件的 ID?
- android - 如何使用 BottomNavigationBar 返回到 Android 中的最后一个片段
- swift - 快速强制转换为字符串
- rust - 在 Windows 上运行的 Rust 我正在与针对 X86 与 x64 的基本错误作斗争
- reactjs - 在 React Router V6 中使用 React.lazy() 组件创建模式路由
- perl - 如何在 Perl 中将变量数据从子/子文件发送到顶级/父文件
- sql - 为什么联合所有查询都在重复数据?
- node.js - 如何修复 vuetify npm 问题
- laravel - 使用 Laravel 8 和 Pusher 在帐户验证事件上出现 array_merge 错误
- sdk - PyCharm:未解决的参考 'com'