和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
- :digit: ↩︎
- :space: ↩︎
- :alnum: ↩︎