提问者:小点点

正则表达式包含[x-y]字符范围,其中x位于y[closed]之后


在MySQL 8.0.23中,我有一个结构如下的表:

+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Text       | text     | NO   |     | NULL    |                |
+------------+----------+------+-----+---------+----------------+

text字段包含类似于以下内容的标记:

Here's an inline link to a [test-page](https://www.example.com/)

我尝试运行以下查询

SELECT Id, REGEXP_SUBSTR('\d\d\d',Text) FROM mytable

但有个错误说

[HY000][3697] The regular expression contains an [x-y] character range where x comes after y

这个错误信息是什么意思?


共1个答案

匿名用户

该错误通常意味着您的正则表达式语法有问题。

[A-Z]表示字母表中的任何大写字母。但不允许使用[Z-A],因为在字母表中Z位于A之前。因此,正则表达式不会运行。

在您的示例中,regexp_substr的参数顺序错误。根据https://dev.mysql.com/doc/refman/8.0/en/regexp.html文档,语法为

REGEXP_SUBSTR(expr, pat)

但你有

REGEXP_SUBSTR(pat, expr)

假设您的文本字段用于保存折扣。然后一行包含下面这样的内容

Here's an inline link to a [test-page](https://www.example.com/)

将被解释为正则表达式。[test-page]仍然是一个正则表达式范围,其中T在字母表中位于P之前。

因此数据库引擎尝试将文本字段解释为正则表达式,但失败。