- 类别:
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> ] )
实参¶
必填:
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 withABC
, 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);
您可以用 .*
作通配符来匹配尽可能多的字符。以下示例与字符串值中任何位置的模式 Fran
相匹配:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*Fran.*');
+---------------+
| CITY |
|---------------|
| San Francisco |
+---------------+
以下示例使用 i
参数进行不区分大小写的匹配:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '.*fran.*', 'i');
+---------------+
| CITY |
|---------------|
| San Francisco |
+---------------+
要查找与字符串值开头匹配的模式,请运行使用通配符的查询:
SELECT * FROM cities WHERE REGEXP_LIKE(city, 'san.*', 'i');
+-----------------+
| 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.*');
+------+
| CITY |
|------|
+------+
您可以使用 \w+
元字符匹配一个单词,使用 \s
元字符匹配一个空格字符,例如空格或制表符。以下查询搜索包含一个单词、后跟一个空格字符和一个单词的值:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\s\\w+');
+---------------+
| CITY |
|---------------|
| San Francisco |
| San Jose |
| Santa Barbara |
| Palo Alto |
+---------------+
查询的输出不包括 San Luis Obispo
,因为该值包含三个单词,第一个和第二个单词之间有空格,而不是只有两个单词之间有空格。
在正则表达式中,通常可以使用大写元字符来否定小写元字符的含义。例如,使用 \S
元字符运行查询,搜索两个单词之间不包含空格字符的值:
SELECT * FROM cities WHERE REGEXP_LIKE(city, '\\w+\\S\\w+');
+------------+
| 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');
第一个插入的值不包含特殊字符。
要显示数据,请查询表:
SELECT * FROM regex_special_characters;
+-------+
| V |
|-------|
| Snow |
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+
您可以使用 \W
Perl 反斜杠序列搜索任何特殊字符,该序列会搜索非“单词”字符的字符。例如,以下查询搜索表中包含特殊字符的值:
SELECT *
FROM regex_special_characters
WHERE REGEXP_LIKE(v, '.*\\W.*');
+-------+
| V |
|-------|
| Sn.ow |
| Sn@ow |
| Sn$ow |
| Sn\ow |
+-------+
要 在单引号字符串常量中搜索元字符,必须使用两个反斜杠对元字符进行转义。例如,以下查询搜索包含 $
元字符的值:
SELECT *
FROM regex_special_characters
WHERE REGEXP_LIKE(v, '.*\\$.*');
+-------+
| V |
|-------|
| Sn$ow |
+-------+
如果搜索反斜杠,则需要额外的反斜杠转义字符。例如,以下查询搜索包含 \
或 .
元字符的值:
SELECT *
FROM regex_special_characters
WHERE REGEXP_LIKE(v, '.*(\\.|\\\\).*');
+-------+
| V |
|-------|
| Sn.ow |
| Sn\ow |
+-------+