PostgreSQL 正则表达式
~ 匹配正则表达式,区分大小写 'thomas' ~ '.*thomas.*'
~* 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*'
!~ 不匹配正则表达式,区分大小写 'thomas' !~ '.*Thomas.*'
!~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.*'
举例:
select * from actor where last_name ~ 'N'; 查找 last_name 含 '.*N.*' 的
园括号的的正则表达式:如果正则表达式包含任何圆括号,那么将返回匹配第一对子表达式对应第一个左圆括号的的文本
substring('foobar' from 'o.b') 结果:oob
substring('foobar' from 'o(.)b') 结果:o
| 标识选择(两个候选之一) 如: a|b 可匹配 a 或 b
* 表示重复前面的项零次或更多次 如: a* 可匹配 a、aa、aaaa...
+ 表示重复前面的项一次或更多次 如: a+ 可匹配 aa、aaa、aaaa...
() 可以使用圆括弧 () 把项组合成一个逻辑项
? 匹配 0 个或者 1 个原子的序列 如: a? 可匹配 a、aaa、aaaa
*? * 的非贪婪模式
+? + 的非贪婪模式
?? ? 的非贪婪模式
{m} 匹配 m 个原子的序列 如: a{2} 可匹配 aaa
{m,} 匹配 m 个或者更多原子的序列 如: a{2,} 可匹配 aaa、aaaaa...
{m,n} 匹配 m 到 n 个(包含两端) 原子的序列;m 不能比 n 大 如:a{2,3} 可匹配 aa、aaa
{m}? {m} 的非贪婪模式
{m,}? {m,} 的非贪婪模式
{m,n}? {m,n} 的非贪婪模式
^ 匹配字串的开头 如:^aa 可匹配 aa 开头的任意字符
$ 匹配字串的结尾 如:b$ 可匹配 b 结尾的任意字符,(abc)$ 可匹配 abc 结尾的任意字符
\n 匹配换行
\r 匹配回车
\t 匹配制表符
\d 匹配任意数字
\s 匹配空格
\w 匹配任意字母
\D 匹配非数字
\S 匹配非空格
\W 匹配非字母
[a-z] 匹配任意小写字母
[A-Z] 匹配任意大写字母
[^a-z] 匹配非小写字母
[^A-Z] 匹配非大写字母
[0-9] 匹配任意数字
[^0-9] 匹配非数字
一个方括弧表达式 [...] 声明一个字符表, 就像 POSIX 正则表达式一样
举例:
[abc] 可匹配 a 或 b 或 c 或 ab 或 ac 或 bc
[a]+ 可匹配一个 a 或多个 a
[\d\.]+ 可匹配一个数字或多个同时可匹配一个点. 或多个点. ,\d 表示任意数字,\. 表示小数位点.
也可写成:\d+\.+\d+
\k 把 k 当作一个普通字符看待(这里的 k 是非字母数字字符)
如: \\ 可匹配一个\
\{ 可匹配{
举例:select 'abc\def'::bytea;
结果:报错,这是因为对于反斜线无法强转为 bytea 字节类型,需要对反斜线转义使用双斜线 \\
select 'abc\\def'::bytea;
结果:成功,但由于是 bytea 字节类型无法被人为识别
select convert_from('abc\\def'::bytea,'utf-8');
结果:成功