pgsql 筛选中文字符正则_Postgresql 正则表达式

9.7.3. POSIX 正则表达式

Table 9-11 列出了所有可用的 用于 POSIX 正则表达式的操作符。

Table 9-11. 正则表达式匹配操作符

操作符描述例子

~

匹配正则表达式,大小写相关

'thomas' ~ '.*thomas.*'

~*

匹配正则表达式,大小写无关

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

!~

不匹配正则表达式,大小写相关

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

!~*

不匹配正则表达式,大小写无关

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

POSIX 正则表达式提供了比 LIKE 和 SIMILAR TO 操作符 更强大的模式匹配的方法。许多 Unix 工具,比如 egrep, sed,或 awk 使用一种与我们这里描述的类似的模式匹配语言。

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

一些例子:

'abc' ~ 'abc' true

'abc' ~ '^a' true

'abc' ~ '(b|d)' true

'abc' ~ '^(b|c)' false

带两个参数的substring,substring(string from pattern),提供了从字串中抽取一个匹配 POSIX 正则表达式模式的 子字串的方法。如果没有匹配它返回 NULL,否则就是文本中匹配模式的那部分。 但是如果该模式包含任何圆括弧,那么将返回匹配第一对子表达式(对应第一个左圆括弧的) 的文本。如果你想在表达式里使用圆括弧而又不想导致这个例外,那么你可以在整个表达式外边放上一对儿圆括弧。 如果你需要在想抽取的子表达式前有圆括弧,参阅描述的非捕获性圆括弧。

一些例子:

substring('foobar' from 'o.b') oob

substring('foobar' from 'o(.)b') o

regexp_replace 函数提供了将匹配 POSIX 正则表达式模式地子字串替换为信的文本的功能。 它的语法是 regexp_replace(source, pattern, replacement [, flags ])。 如果没有匹配 pattern 的子字串,那么返回不加修改的 source 字串。 如果有匹配,则返回的 source 字串里面的对应子字串将被 replacement 字串替换掉。replacement 字串可以包含 \n, 这里的 n 是 1 到 9, 表明源字串里匹配模式里第 n 个圆括弧子表达式的部分将插入在该位置, 并且它可以包含 \& 表示应该插入匹配整个模式的字串。 如果你需要放一个文本反斜杠在替换文本里,那么写 \\。 (和通常一样,记得在文本常量字串里写双反斜杠。)

Some examples:

regexp_replace('foobarbaz', 'b..', 'X')

fooXbaz

regexp_replace('foobarbaz', 'b..', 'X', 'g')

fooXX

regexp_replace('foobarbaz', 'b(..)', 'X\\1Y', 'g')

fooXarYXazY

PostgreSQL 的正则表达式是使用 Henry Spencer 写的一个包来实现的。下面的正则表达式的大部分描述都是从他的手册页里面 逐字拷贝过来的。

9.7.3.1. 正则表达式

正则表达式("RE"),在POSIX1003.2 中定义, 它有两种形式:扩展的RE或者是ERE (基本上就是那些在 egrep 里的), "基本"的RE或者是BRE (基本上就是那些在 ed里的)。 PostgreSQL 两种形式都实现了,并且还做了一些POSIX里面没有的, 但是因为在类似 Perl 或者 Tcl 这样的语言中得到广泛应用的一些扩展。 使用了那些非POSIX扩展的 RE 叫高级 RE, 或者我们文档里说的 ARE。ARE 几乎完全是 ERE 的超集,但是 BRE 有几个符号上的不兼容(以及更多的限制)。我们首先描述 ARE 和 ERE 形式, 描述那些只适用于 ARE 的特性,然后描述 BRE 的区别是什么。

注意: 我们可以通过设置运行时参数regex_flavor来选择 PostgreSQL 接受的正则表达式的形式。 通常的设置是advanced(高级),但是我们可以选择 extended 和 7.4 以前的PostgreSQL版本做到最大的向下兼容。

(现代)的 RE 是一个或多个非空的 分支, 由 | 分隔。它匹配任何匹配其中一个分支的东西。

一个分支是一个或多个有修饰的原子或者约束 连接而成。一个原子匹配第一个,然后后面的原子匹配第二个, 以此类推。

一个有修饰的原子是一个原子

你可能感兴趣的:(pgsql,筛选中文字符正则)