类别:

字符串函数(正则表达式)

[ NOT ] REGEXP

执行比较以确定字符串是否与指定模式相匹配。两个输入都必须是文本表达式。

REGEXP 与 [ NOT ] LIKE 函数类似,但使用 POSIX 扩展的正则表达式而不是 SQL LIKE 模式语法。它支持比 LIKE 更复杂的匹配条件。

小技巧

您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务

别名:

[ NOT ] RLIKE (第 2 种语法)

另请参阅:字符串函数(正则表达式)

语法

<subject> [ NOT ] REGEXP <pattern>
Copy

实参

必填:

subject

以匹配为准。

pattern

要匹配的模式。

返回

返回 BOOLEAN 或 NULL。

  • 指定 REGEXP 时,如果存在匹配项,则值为 TRUE。否则返回 FALSE。

  • 指定 NOT REGEXP 时,如果没有匹配项,则值为 TRUE。否则返回 FALSE。

  • 当指定 REGEXP 或 NOT REGEXP 时,如果任何实参为 NULL,则返回 NULL。

使用说明

排序规则详细信息

Arguments with collation specifications are currently not supported.

示例

以下示例演示了如何将 REGEXP 与简单的通配符表达式一起使用:

创建表并加载数据:

CREATE OR REPLACE TABLE strings (v VARCHAR(50));
INSERT INTO strings (v) VALUES
    ('San Francisco'),
    ('San Jose'),
    ('Santa Clara'),
    ('Sacramento');
Copy

使用通配符搜索模式:

SELECT v
    FROM strings
    WHERE v REGEXP 'San* [fF].*'
    ORDER BY v;
Copy
+---------------+
| V             |
|---------------|
| San Francisco |
+---------------+

反斜杠字符 \ 是正则表达式中的转义字符,用于指定特殊字符或字符组。例如,\s 是空格的正则表达式。

解析字面量字符串的 Snowflake 字符串解析器 将反斜杠视为转义字符。例如,反斜杠用作指定制表符的字符序列的一部分。因此,要创建包含单个反斜杠的字符串,必须指定 两个 反斜杠。例如,将以下输入语句中的字符串与输出中的相应字符串进行比较:

INSERT INTO strings (v) VALUES
    ('Contains embedded single \\backslash')
    ;
Copy
SELECT * 
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+
| V                                   |
|-------------------------------------|
| Contains embedded single \backslash |
| Sacramento                          |
| San Francisco                       |
| San Jose                            |
| Santa Clara                         |
+-------------------------------------+

此示例演示如何搜索以“San”开头的字符串,其中“San”是一个完整的单词(例如,不是“Santa”的一部分)。\b 是字词边界的转义序列。

SELECT v, v regexp 'San\\b.*' AS MATCHES
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | False   |
| Sacramento                          | False   |
| San Francisco                       | True    |
| San Jose                            | True    |
| Santa Clara                         | False   |
+-------------------------------------+---------+

此示例演示如何搜索后跟反斜杠的空格。请注意,要搜索的单个反斜杠由以下 四个 反斜杠表示;若要 REGEXP 查找字面量反斜杠,必须对该反斜杠进行转义,因此需要两个反斜杠。字符串解析器要求对每个反斜杠进行转义,因此表达式包含四个反斜杠来表示表达式正在搜索的一个反斜杠:

SELECT v, v regexp '.*\\s\\\\.*' AS MATCHES
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+

下面的示例与前面的示例相同,只是它使用 $$ 作为字符串分隔符来告知字符串分析器字符串是字面量,并且不应将反斜杠解释为转义序列。( REGEXP 仍将反斜杠解释为转义序列。)

SELECT v, v regexp $$.*\s\\.*$$ AS MATCHES
    FROM strings
    ORDER BY v;
Copy
+-------------------------------------+---------+
| V                                   | MATCHES |
|-------------------------------------+---------|
| Contains embedded single \backslash | True    |
| Sacramento                          | False   |
| San Francisco                       | False   |
| San Jose                            | False   |
| Santa Clara                         | False   |
+-------------------------------------+---------+
语言: 中文