暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8c 函数和操作符 - 模式匹配操作符 之 POSIX正则表达式

菁菁 2022-10-18
310

描述:正则表达式是一个字符序列,它是定义一个串集合(一个正则集)的缩写。如果一个串属于正则表达式描述的正则集时,则称该串匹配该正则表达式。POSIX正则表达式提供了比LIKESIMILAR TO操作符更强大的含义。表5-4列出了所有可用于POSIX正则表达式模式匹配的操作符。

                               表 正则表达式匹配操作符

操作符

描述

例子

~

匹配正则表达式,大小写敏感

'thomas' ~ '.*thomas.*'

~*

匹配正则表达式,大小写不敏感

'thomas' ~* '.*Thomas.*'

!~

不匹配正则表达式,大小写敏感

'thomas' !~ '.*Thomas.*'

!~*

不匹配正则表达式,大小写不敏感

'thomas' !~* '.*vadim.*'

匹配规则:

a. 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。

b. 除了上文提到的元字符外,POSIX正则表达式还支持下列模式匹配元字符,如下表所示。

       表  元字符及其含义

元字符

含义

^

表示串开头的匹配

$

表示串末尾的匹配

.

匹配任意单个字符

正则表达式函数:

POSIX正则表达式支持下面函数。

substring(string from pa...函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。

regexp_count(string tex...函数提供了获取匹配POSIX正则表达式模式的子串数量的功能。

regexp_instr(string tex...函数提供了获取匹配POSIX正则表达式模式子串位置的功能。

regexp_substr(string te...函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。

regexp_replace(string, p...函数提供了将匹配POSIX正则表达式模式的子串替换为新文本的功能。

regexp_matches(string te...函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成。

regexp_split_to_table(st...函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。

regexp_split_to_array(st...和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回

 正则表达式分离函数会忽略零长度的匹配,这种匹配发生在串的开头或结尾或者正好发生在前一个匹配之后。这和正则表达式匹配的严格定义是相悖的,后者由regexp_matches实现,但是通常前者是实际中最常用的行为。

示例

gbase=# SELECT 'abc' ~ 'Abc' AS RESULT;

result

--------

f

(1 row)

gbase=# SELECT 'abc' ~* 'Abc' AS RESULT;

result

--------

t

(1 row)

gbase=# SELECT 'abc' !~ 'Abc' AS RESULT;

result

--------

t

(1 row)

gbase=# SELECT 'abc'!~* 'Abc' AS RESULT;

result

--------

f

(1 row)

gbase=# SELECT 'abc' ~ '^a' AS RESULT;

result

--------

t

(1 row)

gbase=# SELECT 'abc' ~ '(b|d)'AS RESULT;

result

--------

t

(1 row)

gbase=# SELECT 'abc' ~ '^(b|c)'AS RESULT;

result

--------

f

(1 row)

虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地弄成需要任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

暂无图片
获得了346次点赞
暂无图片
内容获得178次评论
暂无图片
获得了143次收藏