MariaDB regexp_replace反向引用未按预期工作

f8rj6qna  于 2022-12-26  发布在  其他
关注(0)|答案(2)|浏览(163)

我在一个用户定义的函数中有一个简单的正则表达式

set mm = regexp_replace(in_str, '^M([0-9]+(\.[0-9]+)?).*$', '\\1');

在MariaDB 10.1中传入'M56-5'时,我会得到预期的“56”,但在MariaDB 10.4中,我得到一个错误“数据在第1行的列'mm'被截断”。当我传入'M56.5'时,我在两个版本中都得到预期的“56.5”。是否有什么变化?

7lrncoxx

7lrncoxx1#

我想明白了。我错误地使用了一个反斜杠来转义.“”,而在转义特殊字符时需要使用两个反斜杠,一个用于MariaDB解析器,一个用于regex库。https://mariadb.com/kb/en/regular-expressions-overview/#escaping

goucqfw6

goucqfw62#

mysql> SELECT regexp_replace('M56-5 foo', '^M([0-9]+(\.[0-9]+)?).*$', '$1');
+---------------------------------------------------------------+
| regexp_replace('M56-5 foo', '^M([0-9]+(\.[0-9]+)?).*$', '$1') |
+---------------------------------------------------------------+
| 56-5                                                          |
+---------------------------------------------------------------+

(That使用的是MySQL 8.0.31 --最近MySQL和MariaDB版本的regexp语法出现了一些不一致。)

相关问题