美文网首页
PostgreSQL基础知识--模式匹配

PostgreSQL基础知识--模式匹配

作者: Amy1234567 | 来源:发表于2021-04-29 13:17 被阅读0次

    一,LIKE

    string LIKE pattern [ESCAPE escape-character]

    string NOT LIKE pattern [ESCAPE escape-character]

    如果pattern不包含百分号或者下划线,那么该模式只代表它本身;这时候LIKE的行为就像等号操作符。 在pattern里的下划线(_)匹配任何单个字符;而一个百分号(%)匹配零或多个任何字符。

    1. 关键字ILIKE可以用于替换LIKE, 令该匹配就当前的区域设置是大小写无关的。这个特性不是SQL标准, 是PostgreSQL扩展。

    my test

    2. 操作符~~等效于LIKE,而~~*等效于ILIKE。 还有!~~和!~~*操作符分别 代表NOT LIKE和NOT ILIKE。所有这些操作符都是PostgreSQL特有的。

    my test

    二,SIMILAR TO正则表达式

    string SIMILAR TO pattern [ESCAPE escape-character]

    string NOT SIMILAR TO pattern [ESCAPE escape-character]

    SIMILAR TO支持下面这些从 POSIX 正则表达式借用的模式匹配元字符:

    *表示重复前面的项零次或更多次

    +表示重复前面的项一次或更多次

    ? 表示重复前面的项零或一次。

    实例1:

    my test

    实例2:

    my test

    三, POSIX正则表达式

    正则表达式是一个字符序列,它是定义一个字符串合集(一个正则合集)的缩写。如果一个字符串是正则表达式描述的正则集合中的一员时,我们就说这个字符串匹配改正则表达式。和like一样,模式字符准确地匹配字符串字符,除非在正则表达式语言里有特殊字符(不过正则表达式用的特殊字符和like用的不同)。和like不一样的是,正则表达式可以匹配字符串里的任何位置,除非该正则表达式明确地描述在字符串开头或结尾。

    my test my test

    两个参数的substring(stringfrom pattern)函数提供了从字符串中抽取一个 匹配 POSIX 正则表达式模式的子字符串的方法。如果没有匹配它返回 NULL , 否则就是文本中匹配模式的那部分。

    my test

    但是如果该模式包含任何圆括弧,那么将返回匹配第一对子表达式

    my test

    regexp_replace(source, pattern, replacement [,flags]) 

    提供了将匹配POSIX正则表达式模式的子字符串替换为新文本的功能。如果没有匹配pattern的子字符串,那么返回不加修饰的source字符串。如果有匹配,则返回的source字符串里面的对应子字符串,将被replacement字符串替换掉。

    my test

    replacement字符串可以包含\n,这里的n是1到9,表明源字符串中匹配第n个圆括弧子表达式的部分将插入在该位置,并且它可以包含\&表示应该插入匹配整个模式的字符串,如果你需要放一个文本反斜杠在替换文本里,那么写\\(和通常一样,几点在文本常量字符串里写双反斜杠)。

    my test

    可选的flags参数包含零个或多个改变函数行为的单字母标记。i表示进行大小写无关的匹配,g表示替换每一个匹配的子字符串而不仅仅是第一个。

    my test

    regexp_matches(stringpattern [, flags])

    regexp_matches函数返回一个所有匹配POSIX正则表达式的获取子串结果的text数组。这个函数可以返回0行,1行或多行。如果模式包含没有括号的子表达式,则每行返回的是单元素的文本数组,其中包含的子串想匹配整个模式。如果模式包含括号的子表达式,函数返回一个文本数组,n的元素是子串匹配n括号子表达式内的模式。参数flags是一个选项text字符串,含有0或者更多字母标记类改变函数行为。

    my test

    如果pattern没有匹配,则返回0行。

    my test

    参数flags是一个选项text字符串,含有0或者更多字母标记类改变函数行为。

    my test

    regexp_split_to_table(stringpattern [, flags])

    regexp_split_to_table函数使用POSIX正则表达式作为分隔符,分隔字符串。如果没有匹配pattern,函数将返回string。如果有至少一个匹配,每个匹配返回从最后一个匹配结束(或者字符串开头)到匹配开始的文本。当没有更多匹配,返回最后一个匹配的结束到字符串的结尾的文本。flags参数是一个选项text字符串,含有0或者更多单字符标记来改变函数行为。

    regexp_split_to_array(string, pattern [,flags])函数与regexp_split_to_table相同

    实例1:

    my test

    实例2:

    my test

    实例3:

    my test

    文章参考:https://www.php.cn/manual/view/20344.html

    正则表达式太诡异了,完全理解不了原理,只能用一用

    相关文章

      网友评论

          本文标题:PostgreSQL基础知识--模式匹配

          本文链接:https://www.haomeiwen.com/subject/danurltx.html