正则表达式概述

正则表达式提供了一种强大的匹配文本模式的方法。你可以在 LIKE 语句中使用简单的通配符(如 %,_),但是正则表达式为你提供了更多的灵活性和匹配选项。

使用场景

正则表达式能进行复杂的字符串匹配和操作,以下列举一些常见的使用场景:

  • 数据验证:正则表达式可以用来验证数据是否符合特定的格式,例如检查一个字段是否包含有效的电子邮件地址、电话号码或者社会保障号等。例如,你可以使用正则表达式来找出所有格式不符合规范的电子邮件地址:

    1. SELECT email
    2. FROM users
    3. WHERE email NOT REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$';
  • 数据筛选:正则表达式可以用来搜索包含或不包含特定模式的数据。例如,如果你想要找出所有以特定前缀开始的电话号码,你可以使用正则表达式来匹配这些号码:

    1. SELECT phone_number
    2. FROM users
    3. WHERE phone_number REGEXP '^180';
  • 数据清洗:在数据清洗中,正则表达式也非常有用。例如,你可能需要清除字符串中的特殊字符、空格或者提取字符串中的数字等,正则表达式可以很容易地实现这些功能:

    1. SELECT REGEXP_REPLACE(name, '[^a-zA-Z]', '')
    2. 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 REGEXPREGEXP 的否定表达式
REGEXP_INSTR()匹配正则表达式的子串起始索引
REGEXP_LIKE()字符串是否匹配正则表达式
REGEXP_REPLACE()替换匹配正则表达式的子字符串
REGEXP_SUBSTR()返回匹配正则表达式的子串