我在一个用户定义的函数中有一个简单的正则表达式
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”。是否有什么变化?
7lrncoxx1#
我想明白了。我错误地使用了一个反斜杠来转义.“”,而在转义特殊字符时需要使用两个反斜杠,一个用于MariaDB解析器,一个用于regex库。https://mariadb.com/kb/en/regular-expressions-overview/#escaping
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语法出现了一些不一致。)
2条答案
按热度按时间7lrncoxx1#
我想明白了。我错误地使用了一个反斜杠来转义.“”,而在转义特殊字符时需要使用两个反斜杠,一个用于MariaDB解析器,一个用于regex库。https://mariadb.com/kb/en/regular-expressions-overview/#escaping
goucqfw62#
(That使用的是MySQL 8.0.31 --最近MySQL和MariaDB版本的regexp语法出现了一些不一致。)