正则表达式概述

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

\d

表示匹配数字

\s

表示匹配空白字符

\w

表示匹配单词字符

\D\S\W

表示匹配相反的字符集

备注

在正则表达式中,这些特殊字符需要使用 \ 进行转义,例如 \\. 表示匹配一个实际的 . 字符,而不是任何字符。

MatrixOne 的正则表达式默认是区分大小写的。如果你希望进行不区分大小写的匹配,可以使用 REGEXP_LIKE(column, pattern, 'i') 这样的语法。其中 i 表示不区分大小写。

参考文档

正则表达式函数列表

名称

释义

NOT REGEXP

REGEXP 的否定表达式

REGEXP_INSTR()

匹配正则表达式的子串起始索引

REGEXP_LIKE()

字符串是否匹配正则表达式

REGEXP_REPLACE()

替换匹配正则表达式的子字符串

REGEXP_SUBSTR()

返回匹配正则表达式的子串