LIKE
数据库支持多种模式匹配方式。第一种就是 LIKE 或者 NOT LIKE。
示例 | 结果 |
‘abc’ LIKE ‘abc’ | true |
‘abc’ LIKE ‘abcz’ | false |
‘abc’ LIKE ‘a%’ | true |
‘abc’ LIKE ‘_a_’ | false |
‘abc’ LIKE ‘a_’ | false |
‘abc’ LIKE ‘a’ | false |
SIMILAR TO
第二种模式匹配是数据库支持的 SIMILAR TO,使用方式和 LIKE 相似,不过支持更多的匹配语法,具体见下表格。
语法 | 描述 | 示例 | 结果 |
| | 支持可选的匹配 | 'abc' SIMILAR TO '%(b|d|c|e)%' | True |
* | 前一个元素0或者多次重复 | 'abc' SIMILAR TO 'abcd*' | True |
'abc' SIMILAR TO 'abc*' | true | - | - |
'abc' SIMILAR TO 'ab*' | false | - | - |
+ | 前一个元素1次或者多次重复 | 'abc' SIMILAR TO 'abc+' | True |
'abc' SIMILAR TO 'abcc+' | false | - | - |
POSIX 正则表达式
数据库还支持 POSIX 正则表达式,它提供了比 LIKE 和 SIMILAR TO 操作符更强大的函数。POSIX 正则表达式支持的函数如下表格。
函数 | 功能 | 示例 | 结果 |
substring(string from pattern) | 从 string 中按照正则 pattern 截取字符串 | substring('foobar' from 'o.b') | oob |
regexp_replace(source, pattern, replacement [, flags ]) | 替换 source 中匹配的字符串 | regexp_replace('foobarbaz', 'b..', 'X') | fooXX |
regexp_matches(string, pattern [, flags ]) | 函数返回一个文本数组,该数组由匹配一个 POSIX 正则表达式模式得到的所有被捕获子串构成 | regexp_matches('foobarbequebaz', '(bar)(beque)'); | {bar,beque} |
regexp_split_to_table(string, pattern [, flags ]) | 函数把一个 POSIX 正则表达式模式当作一个定界符来分离一个串 | SELECT regexp_split_to_table('the quick brown fox jumped', E'\\\\s+') ; | the quick brown fox jumped |
regexp_split_to_array(string, pattern [, flags ]) | 和 regexp_split_to_table 类似,是一个正则表达式分离函数,不过它的结果以一个 text 数组的形式返回 | SELECT regexp_split_to_array('the quick brown fox jumped', E'\\\\s+'); | {the,quick,brown,fox,jumped} |