psql 正则匹配

本文详细介绍了正则表达式的各种元素,包括原子、数量词、约束和逃逸字符,以及如何使用POSIX正则表达式进行字符串匹配、替换、抽取和分割。同时,提供了常用的正则表达式缩写,如d、s和w。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值