来源:http://www.postgres.cn/docs/11/
9.7. 模式匹配
PostgreSQL提供了三种独立的实现模式匹配的方法:SQL LIKE
操作符、更近一些的SIMILAR TO
操作符(SQL:1999 里添加进来的)和POSIX-风格的正则表达式。除了这些基本的“这个串匹配这个模式吗?”操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。
9.7.1. LIKE
在pattern
里的下划线 (_
)代表(匹配)任何单个字符; 而一个百分号(%
)匹配任何零或更多个字符的序列。
要匹配文本的下划线或者百分号,而不是匹配其它字符, 在pattern
里相应的字符必须 前导逃逸字符。缺省的逃逸字符是反斜线,但是你可以用ESCAPE
子句指定一个不同的逃逸字符。 要匹配逃逸字符本身,写两个逃逸字符。
关键字ILIKE
可以用于替换LIKE
, 它令该匹配根据活动区域成为大小写无关。这个不属于SQL标准而是一个PostgreSQL扩展。
操作符~~
等效于LIKE
, 而~~*
对应ILIKE
。 还有 !~~
和!~~*
操作符分别代表NOT LIKE
和NOT ILIKE
。所有这些操作符都是PostgreSQL特有的。
9.7.2. SIMILAR TO
正则表达式
SIMILAR TO
操作符根据自己的模式是否匹配给定串而返回真或者假。 它和LIKE
非常类似,只不过它使用 SQL 标准定义的正则表达式理解模式。
9.7.3. POSIX正则表达式
表 9.14列出了所有可用于 POSIX 正则表达式模式匹配的操作符。表 9.14. 正则表达式匹配操作符
操作符 | 描述 | 例子 |
---|---|---|
~ |
匹配正则表达式,大小写敏感 | "thomas" ~ ".*thomas.*" |
~* |
匹配正则表达式,大小写不敏感 | "thomas" ~* ".*Thomas.*" |
!~ |
不匹配正则表达式,大小写敏感 | "thomas" !~ ".*Thomas.*" |
!~* |
不匹配正则表达式,大小写不敏感 | "thomas" !~* ".*vadim.*" |
POSIX正则表达式提供了比LIKE
和SIMILAR TO
操作符更强大的含义。