正则表达式概述
正则表达式提供了一种强大的匹配文本模式的方法。你可以在 LIKE 语句中使用简单的通配符(如 %,_),但是正则表达式为你提供了更多的灵活性和匹配选项。
使用场景
正则表达式能进行复杂的字符串匹配和操作,以下列举一些常见的使用场景:
-
数据验证:正则表达式可以用来验证数据是否符合特定的格式,例如检查一个字段是否包含有效的电子邮件地址、电话号码或者社会保障号等。例如,你可以使用正则表达式来找出所有格式不符合规范的电子邮件地址:
SELECT email FROM users WHERE email NOT REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$';
-
数据筛选:正则表达式可以用来搜索包含或不包含特定模式的数据。例如,如果你想要找出所有以特定前缀开始的电话号码,你可以使用正则表达式来匹配这些号码:
SELECT phone_number FROM users WHERE phone_number REGEXP '^180';
-
数据清洗:在数据清洗中,正则表达式也非常有用。例如,你可能需要清除字符串中的特殊字符、空格或者提取字符串中的数字等,正则表达式可以很容易地实现这些功能:
SELECT REGEXP_REPLACE(name, '[^a-zA-Z]', '') FROM users;
这段 SQL 将会返回
name
字段中所有非字母的字符被替换掉的结果。 -
文本分析:如果你正在进行文本分析,正则表达式可以帮助你找出文本中的特定词汇或短语,甚至可以用来进行某些形式的自然语言处理。
特殊字符
正则表达式使用 POSIX(Portable Operating System Interface)扩展正则表达式。下面是一些需要注意的特殊字符:
字符 | 说明 |
---|---|
. |
匹配任何单个字符(除了换行符) |
* |
表示前面的元素可以重复任意次(包括零次) |
+ |
表示前面的元素可以重复一次或多次。 |
? |
表示前面的元素可以重复零次或一次。 |
{n} |
表示前面的元素可以重复 n 次。 |
{n,} |
表示前面的元素可以重复 n 次或更多次。 |
{n,m} |
表示前面的元素可以重复 n 次到 m 次。 |
^ |
表示匹配字符串的开始。 |
$ |
表示匹配字符串的结束。 |
[abc] |
表示匹配 a、b 或 c。 |
[^abc] |
表示匹配任何不是 a、b 或 c 的字符。 |
(abc|def) |
表示匹配 abc 或 def。 |
\d |
表示匹配数字 |
\s |
表示匹配空白字符 |
\w |
表示匹配单词字符 |
\D 、\S 和 \W |
表示匹配相反的字符集 |
Note
在正则表达式中,这些特殊字符需要使用 \
进行转义,例如 \\.
表示匹配一个实际的 .
字符,而不是任何字符。
MatrixOne 的正则表达式默认是区分大小写的。如果你希望进行不区分大小写的匹配,可以使用 REGEXP_LIKE(column, pattern, 'i')
这样的语法。其中 i
表示不区分大小写。
参考文档
正则表达式函数列表
名称 | 释义 |
---|---|
NOT REGEXP | REGEXP 的否定表达式 |
REGEXP_INSTR() | 匹配正则表达式的子串起始索引 |
REGEXP_LIKE() | 字符串是否匹配正则表达式 |
REGEXP_REPLACE() | 替换匹配正则表达式的子字符串 |
REGEXP_SUBSTR() | 返回匹配正则表达式的子串 |