类别:

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

REGEXP_LIKE

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

REGEXP_LIKE is similar to the LIKE function, but with POSIX extended regular expressions (link removed) instead of SQL LIKE pattern syntax. REGEXP_LIKE supports more complex matching conditions than LIKE.

小技巧

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

别名:

RLIKE (1st syntax)

语法

REGEXP_LIKE( <subject> , <pattern> [ , <parameters> ] )
Copy

实参

必填:

subject

用于搜索匹配项的字符串。

pattern

要匹配的模式。

有关指定模式的准则,请参阅 字符串函数(正则表达式)

可选:

parameters

包含一个或多个字符的字符串,指定用于搜索匹配项的参数。支持的值:

参数

描述

c

区分大小写的匹配

i

不区分大小写的匹配

m

多行模式

e

提取子匹配项

s

Single-line mode POSIX wildcard character . matches \n

默认:c

For more information, see 为正则表达式指定参数.

返回

返回 BOOLEAN 值或 NULL:

  • 如果有匹配项,则返回 TRUE。

  • 如果没有匹配项,则返回 FALSE。

  • 如果任何实参为 NULL,则返回 NULL。

使用说明

  • The function implicitly anchors a pattern at both ends (for example, '' automatically becomes '^$', and 'ABC' automatically becomes '^ABC$'). For example, to match any string starting with ABC, the pattern is 'ABC.*'.

  • 反斜杠字符 (\) 是转义字符。有关更多信息,请参阅 在以单引号括起的字符串常量中指定正则表达式

  • 有关更多使用说明,请参阅 一般使用说明,了解正则表达式函数。

排序规则详细信息

Arguments with collation specifications currently aren't supported.

示例

以下示例使用 REGEXP_LIKE 函数:

For additional examples of regular expressions, see REGEXP.

对字符串运行基本的正则表达式查询

创建一个包含城市名称的表:

CREATE OR REPLACE TABLE cities(city VARCHAR(20));

INSERT INTO cities VALUES
  ('Sacramento'),
  ('San Francisco'),
  ('San Luis Obispo'),
  ('San Jose'),
  ('Santa Barbara'),
  ('Palo Alto'),
  (NULL);
Copy

您可以用 .* 作通配符来匹配尽可能多的字符。以下示例与字符串值中任何位置的模式 Fran 相匹配:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*Fran.*');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

以下示例使用 i 参数进行不区分大小写的匹配:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*fran.*', 'i');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
+---------------+

要查找与字符串值开头匹配的模式,请运行使用通配符的查询:

SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*', 'i');
Copy
+-----------------+
| CITY            |
|-----------------|
| San Francisco   |
| San Luis Obispo |
| San Jose        |
| Santa Barbara   |
+-----------------+

To run a case-sensitive query with a wildcard, omit the i parameter:

SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*');
Copy
+------+
| CITY |
|------|
+------+

您可以使用 \w+ 元字符匹配一个单词,使用 \s 元字符匹配一个空格字符,例如空格或制表符。以下查询搜索包含一个单词、后跟一个空格字符和一个单词的值:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\s\\w+');
Copy
+---------------+
| CITY          |
|---------------|
| San Francisco |
| San Jose      |
| Santa Barbara |
| Palo Alto     |
+---------------+

查询的输出不包括 San Luis Obispo,因为该值包含三个单词,第一个和第二个单词之间有空格,而不是只有两个单词之间有空格。

在正则表达式中,通常可以使用大写元字符来否定小写元字符的含义。例如,使用 \S 元字符运行查询,搜索两个单词之间不包含空格字符的值:

SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\S\\w+');
Copy
+------------+
| CITY       |
|------------|
| Sacramento |
+------------+

对包含特殊字符的字符串运行正则表达式查询

本节中的示例搜索了包含特殊字符的值,这些特殊字符是 a-z、A-Z、下划线 (“_”) 或十进制数字以外的字符。

To search for a metacharacter, escape the metacharacter. For more information, see 在以单引号括起的字符串常量中指定正则表达式.

创建一个表,然后插入一些带有特殊字符的值:

CREATE OR REPLACE TABLE regex_special_characters(v VARCHAR(20));

INSERT INTO regex_special_characters VALUES
  ('Snow'),
  ('Sn.ow'),
  ('Sn@ow'),
  ('Sn$ow'),
  ('Sn\\ow');
Copy

第一个插入的值不包含特殊字符。

要显示数据,请查询表:

SELECT * FROM regex_special_characters;
Copy
+-------+
| V     |
|-------|
| Snow  |
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+

您可以使用 \W Perl 反斜杠序列搜索任何特殊字符,该序列会搜索非“单词”字符的字符。例如,以下查询搜索表中包含特殊字符的值:

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*\\W.*');
Copy
+-------+
| V     |
|-------|
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+

在单引号字符串常量中搜索元字符,必须使用两个反斜杠对元字符进行转义。例如,以下查询搜索包含 $ 元字符的值:

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*\\$.*');
Copy
+-------+
| V     |
|-------|
| Sn$ow |
+-------+

如果搜索反斜杠,则需要额外的反斜杠转义字符。例如,以下查询搜索包含 \. 元字符的值:

SELECT *
  FROM regex_special_characters
  WHERE REGEXP_LIKE(v, '.*(\\.|\\\\).*');
Copy
+-------+
| V     |
|-------|
| Sn.ow |
| Sn\ow |
+-------+
语言: 中文