和LIKE模式不一样的是,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。

substring(string from pattern)
提供了抽取一个匹配 POSIX 正则表达式模式的子串的方法。

regexp_replace(source, pattern, replacement [, flags ])
regexp_replace函数提供了将匹配 POSIX 正则表达式模式的子串替换为新文本的功能。

regexp_match(string, pattern [, flags ])
regexp_match 函数返回从POSIX正则表达式模式首次匹配到字符串后捕获的子字符串的文本数组。

regexp_matches(string, pattern [, flags ])
regexp_matches函数返回一组捕获的字符串的文本数组

regexp_split_to_table(string, pattern [, flags ])
regexp_split_to_array(string, pattern [, flags ])
regexp_split_to_table把一个 POSIX 正则表达式模式当作一个定界符来分离一个串。

1.原子

原子

描述

(re)

(其中re是任何正则表达式) 匹配一个对re的匹配,匹配将为可能的报告被记下

.

匹配任意单个字符

[chars]

一个方括号表达式, 匹配chars中的任意一个

\k

(其中k是一个非字母数字字符) 匹配一个被当作普通字符看待的特定字符, 例如,\匹配一个反斜线字符

\c

其中c是一个字母数字 (可能跟着其它字符),它是一个逃逸(仅对 ARE; 在 ERE 和 BRE 中,它匹配c)

{

如果后面跟着一个字符,而不是数字, 那么就匹配左花括弧{;如果跟着一个数字, 那么它是范围的开始(见下文)

x

其中x是一个没有其它意义的单个字符,则匹配该字符

2.数量词

量词

匹配

*

一个由原子的 0 次或更多次匹配组成的序列

+

一个由原子的 1 次或更多次匹配组成的序列

?

一个由原子的 0 次或 1 次匹配组成的序列

{m}

一个由原子的正好m次匹配组成的序列

{m,}

一个由原子的m次或更多次匹配组成的序列

{m,n}

一个由原子的从m次到n次(包括)匹配组成的序列;m不能超过n

*?

*的非贪婪版本

+?

+的非贪婪版本

??

?的非贪婪版本

{m}?

{m}的非贪婪版本

{m,}?

{m,}的非贪婪版本

{m,n}?

{m,n}的非贪婪版本

3.约束

约束

描述

^

串开头的匹配

$

串末尾的匹配

(?=re)

在匹配re的子串开始的任何点的positive lookahead匹配(只对 ARE)

(?!re)

在匹配re的子串开始的任何点的negative lookahead匹配(只对 ARE)

(?<=re)

只要有一个点上有一个子串匹配re端, positive lookbehind就在这个点上匹配(只对 ARE)

(?<!re)

只要有一个点上没有子串匹配re端, negative lookbehind就在这个点上匹配(只对 ARE)

4.逃逸

逃逸

描述

\a

警告(响铃)字符,和 C 中一样

\b

退格,和 C 中一样

\B

反斜线(\)的同义词,用来减少双写反斜线

\cX

(其中X是任意字符)低序5位和X相同的字符,它的其他位都是零

\e

排序序列名为ESC的字符,如果无法做到该字符为八进制值033

\f

换页,和 C 中一样

\n

新行,和 C 中一样

\r

回车,和 C 中一样

\t

水平制表符,和 C 中一样

\uwxyz

(其中wxyz正好是四个十六进制位) 字符十六进制值是0xwxyz

\Ustuvwxyz

(其中stuvwxyz正好是八个十六进制位) 字符十六进制值是0xstuvwxyz

\v

垂直制表符,和 C 中一样

\xhhh

(其中hhh是十六进制位的任意序列)十六进制值为0xhhh的字符(一个单一字符,不管用了多少个十六进制位)

\0

值为0(空字节)的字符

\xy

(其中xy正好是两个八进制位,并且不是一个后引用)八进制值为0xy的字符

\xyz

(其中xyz正好是三个八进制位,并且不是一个后引用)八进制值为0xyz的字符

5.缩写

逃逸

描述

\d

[[:digit:]]

\s

[[:space:]]

\w

[[:alnum:]_](注意下划线是被包括的)

\D

[1]

\S

[2]

\W

[3_] (注意下划线是被包括的)

参考文献:
http://www.postgres.cn/docs/10/functions-matching.html


  1. :digit: ↩︎
  2. :space: ↩︎
  3. :alnum: ↩︎