参考链接:

PostgreSQL 模式匹配​www.yiibai.com

1. like

string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]

比较特别的地方:

在pattern里的下划线 (_)代表(匹配)任何单个字符; 而一个百分号(%)匹配任何零或更多个字符的序列。

LIKE模式匹配总是覆盖整个串。因此,要匹配在串内任何位置的序列,该模式必须以百分号

开头和结尾。

要匹配文本的下划线或者百分号,而不是匹配其它字符, 在pattern里相应的字符必须 前导逃

逸字符。缺省的逃逸字符是反斜线,但是你可以用ESCAPE子句指定一个不同的逃逸字符。

要匹配逃逸字符本身,写两个逃逸字符。

请注意反斜线在串文本里已经有特殊含义了,所以如果你写一个 包含反斜线的模式常量,那

你就要在 SQL 语句里写两个反斜线。 因此,写一个匹配单个反斜线的模式实际上要在语句

里写四个反斜线。 你可以通过用 ESCAPE 选择一个不同的逃逸字符 来避免这样;这样反斜

线就不再是 LIKE 的特殊字符了。 但仍然是字符文本分析器的特殊字符,所以你还是需要两

个反斜线。) 我们也可以通过写ESCAPE ''的方式不选择逃逸字符,这样可以有效地禁用逃逸

机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。

关键字ILIKE可以用于替换LIKE, 它令该匹配根据活动区域成为大小写无关。这个不属于

SQL标准而是一个PostgreSQL扩展

操作符~~等效于LIKE, 而~~*对应ILIKE。 还有 !~~和!~~*操作符分别代表NOT LIKE和NOT

ILIKE。所有这些操作符都是PostgreSQL特有的。

2. SIMILAR TO正则表达式

string SIMILAR TO pattern [ESCAPE escape-character]
string NOT SIMILAR TO pattern [ESCAPE escape-character]

它和LIKE非常类似,只不过它使用 SQL 标准定义的正则表达式理解模式。 SQL 正则表达式是在LIKE标记和普通的正则表达式标记的奇怪的杂交。

类似LIKE,SIMILAR TO操作符只有在它的模式匹配整个串的时候才能成功;这一点和普通

的 正则表达式的行为不同,在普通的正则表达式里,模式匹配串的任意部分

SIMILAR TO使用_和%作为分别代表任意单个字符和任意串的通配符(这些可以比得上 POSIX 正则表达式里的.和.*)

除了这些从LIKE借用的功能之外,SIMILAR TO支持下面这些从 POSIX 正则表达式借用的 模

式匹配元字符:

• |表示选择(两个候选之一)。

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

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

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

• {m}表示重复前面的项刚好m次。

• {m,}表示重复前面的项m次或更多次。

• {m,n}表示重复前面的项至少m次并且不超过n次。

• 可以使用圆括号()把多个项组合成一个逻辑项。

• 一个方括号表达式[...]声明一个字符类,就像 POSIX 正则表达式一样。

注意点号(.)不是SIMILAR TO的一个元字符。

和LIKE一样,反斜线禁用所有这些元字符的特殊含义;当然我们也可以用ESCAPE指定一个

不同的逃逸字符。

带三个参数的substring,即substring(string from pattern for escape-character),提供了抽取一个匹配 SQL 正则表达式的子串的方法。

和SIMILAR TO一样,声明的模式必须匹配整个数据函数和操作符串,否则函数失败并返回空值。

为了标识在成功的时候应该返回的模式部分,模式 必须包含逃逸字符的两次出现,并且后面要跟上双引号(")

匹配这两个标记之间的模式的文本将被返回。

substring('foobar' from '%#"o_b#"%' for '#') oob
substring('foobar' from '#"o_b#"%' for '#') NULL

3.POSIX正则表达式

正则表达式匹配操作符

和LIKE模式不一样的是,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾;

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

但是如果该模式包含任何圆括号,那么将返回匹配第一对子表达式(对应第一个左圆括号的) 的文本。

如果你想在表达式里使用圆括号而又不想导致这个例外,那么你可以在整个表达式外边放上一对圆括号。 如果你需要在想抽取的子表达式前有圆括号,参阅后文描述的非捕获性圆括号。

一些例子:
substring('foobar' from 'o.b') oob
substring('foobar' from 'o(.)b') o

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

语法格式: regexp_replace(source, pattern, replacement [, flags ])

如果没有匹配pattern,那么返回不加修改的source串;

replacement串可以包含n, 其中n是 1 到 9, 表明源串里匹配模式里第n个圆括号子表

达式的子串应该被插入;

并且它可以包含&表示应该插入匹配整个模式的子串;

如果你需要

放一个文字形式的反斜线在替换文本里,那么写;

regexp_match 函数返回从POSIX正则表达式模式首次匹配到字符串后捕获的子字符串的文本

数组;

语法是regexp_match(string, pattern [, flags ])

如果没有匹配,结果是NULL。如果找到匹配, 并且pattern不包含括起来的子表达式, 那么结果是包含匹配整个模式的子串的单元素文本数组;

如果找到匹配,并且pattern包含带括号的子表达式, 那么结果是一个文本数组,其中的第n个元素是匹配 pattern的括号括起来的第n 个子表达式的子字符串(不包括“非捕获”括号;详见下文);

flags参数是一个可选的文本字符串, 包含零个或多个单字母标志,用于更改函数的行为;

regexp_matches函数返回一组捕获的字符串的文本数组, 该字符串是通过将POSIX正则表达

式模式匹配到字符串而得到的;

语法是regexp_matches(string, pattern [, flags ])

果没有匹配, 则此函数不返回任何行,如果有一个匹配且没有给出g标志,则返回一行;

如果有N个匹配,并给出g标志,则返回N行。

每个返回的行都是一个文本数组,它包含整个匹配的子字符串或匹配 pattern的括号子表达式的子字符串,就像上面针对 regexp_match所描述的一样。

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

regexp_split_to_table(string, pattern [, flags ])

regexp_split_to_array函数的行为和regexp_split_to_table相同,不过regexp_split_to_array会把它的结果以一个text数组的形式返回。它的语法是regexp_split_to_array(string, pattern [, flags ])。这些参数和regexp_split_to_table的相同。

ELECT foo FROM
regexp_split_to_table('the quick brown fox jumps over the lazy dog', E's+')
AS foo;
foo
-------
the
quick
brown
fox
jumps
over
the
lazy
dog
(9 rows)

SELECT regexp_split_to_array('the quick brown fox jumps over the lazy dog', E's+');
regexp_split_to_array
-----------------------------------------------
{the,quick,brown,fox,jumps,over,the,lazy,dog}
(1 row)

SELECT foo FROM regexp_split_to_table('the quick brown fox', E's*') AS foo;foo
-----
t
h
e
q
u
i
c
k
b
r
o
w
n
f
o
x

[sS]*?表示匹配任意字符,且只匹配一次,即懒惰匹配;

如果是[sS]*没有带?号,也表示匹配任意字符,但允许匹配任意次,即贪婪匹配。

4. 正则表达式细节

注意:一个量词不能紧跟在另外一个量词后面,例如**是非法的。量词不能作为表达式或者子表达式的开头,也不能跟在^或者|后面。

5.方括号表达式

方括号表达式是一个包围在[]中的字符列表;

如果列表以^开头,它匹配任意单个不在该列表参与部分中的字符;

想在列表中包含文本],可以让它做列表的首字符(如果使用了^,需要放在其后);

想在列表中包含文本-,可以让它做列表的首字符或者尾字符,或者一个范围的第二个端点;

想在列表中把文本-当做范围的起点, 把它用[.和.]包围起来,这样它就成为一个排序元素(见下文;

6.正则表达式逃逸

php正则匹配js中变量_Postgresql 中的 正则表达式 模式匹配相关推荐

  1. php正则匹配js中变量_PHP正则表达式核心技术 第4节 php查找匹配函数使用心得

    作者:极客小俊 一个专注于web技术的80后 你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人! php中兼容Perl的正则表达式处理函数 在我们说php系统自带的正则处理函数之前,我们 ...

  2. php正则匹配函数字符串长度,PHP中preg_match函数正则匹配的字符串长度问题

    PHP中preg_match函数正则匹配的字符串长度问题 发布于 2015-10-25 10:24:29 | 166 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: ...

  3. css中变量_CSS中的变量

    css中变量 CSS | 变数 (CSS | Variables) CSS variables allow you to create reusable values that can be used ...

  4. python中变量,python中变量的概念

    python中变量的概念 在python中,变量就是一种标识符, 它是数据的名字,更专业的理解,变量是内存中数据的引用, 编程语言里的变量和初中学习代数时的方程变量很相似. 前面学习数字类型,bool ...

  5. php正则匹配js中变量_PHP正则表达式核心技术完全详解 第12节 [附加知识] 断言匹配...

    作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! 极客小俊@知乎,官方首发原创文章 博客: 极客小俊GeekerJun PHP正则中的断言 ...

  6. go的string正则匹配_基础知识 - Golang 中的正则表达式

    ------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...

  7. php 正则匹配 %3e,在shell脚本中使用正则表达式

    1)在Linuxshell脚本中使用正则表达式解析字符串的正确方法是什么? 包括正则表达式功能的工具包括sed.grep.awk.perl.python等等.即使是更新版本的bash也具有regex功 ...

  8. oracle正则匹配全部,sql – 返回Oracle中正则表达式的所有匹配项

    您已经提供了数据样本,说明这是一行,但已将其显示为两个不同的行.所以这个例子基于你的话. -- Sample of data from your question + extra row for th ...

  9. Javascript正则匹配数字,中英文,中横线,下划线,utf-8中文

    function check_string(nickname)  {      var  reg =  /^[A-Za-z0-9-_\u4e00-\u9fa5]{4,30}$/ ;      if   ...

最新文章

  1. CentOS7部署ELK5.2
  2. “简单”的消息队列与kafka
  3. Phpcms v9专题分类增加模板设置的方法
  4. python转义是什么意思_Python什么情况下会输出转义符
  5. 转dem_约会大作战:真那离开DEM社,欠着的500万就不用还了
  6. c 语言 宏 可变 参数,利用C可变参数和宏定义来实现自己的日志系统
  7. Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)
  8. linux下安装fortran90教程,linux 安装fortran 90
  9. C++ QQ游戏 连连看外挂 内存挂入门
  10. 批量转换图片文件格式(将JPEG、PNG转成JPG)
  11. ps还原上一步快捷键_photoshop恢复上一步操作的快捷键是什么
  12. 玩转Java 8 Stream 系列二进阶(Collectors.mapping 、Collectors.reducing、Collectors.summarizingInt等)
  13. C语言度量代码质量常用指标,代码度量标准
  14. android仿美团外卖选择地址,Android仿美团地址选择
  15. nfc ntag21x ultralight 内存结构
  16. RHEL7升级内核版本
  17. 优秀的JavaScript模块是怎样炼成的
  18. 1990-1999年最强华语金曲TOP100
  19. 经济师人力资源方向备考信息
  20. 离散数学 (II) 习题 1

热门文章

  1. 大鱼风控笔记 1:量化风控体系的风险板块
  2. 机器学习:用梯度下降法实现线性回归
  3. vue双向绑定时添加.sync不起作用的原因
  4. 20145201 20145227 《信息安全系统设计基础》实验二 固件开发
  5. C#探秘系列(八)WPF数据绑定
  6. 一个把时间戳转成日期的javascript函数
  7. [洛谷P3228] [HNOI2013]数列
  8. Oracle入门《Oracle介绍》第一章1-4 Oracle 用户管理
  9. python 验证码test
  10. arcgis 服务网页打开需要输入用户名和密码问题解决