Skip to content

正则表达式概述

正则表达式提供了一种强大的匹配文本模式的方法。你可以在 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() 返回匹配正则表达式的子串