正则表达式工具 |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
通用应用程序 |
EditPad Lite |
EditPad Pro |
语言和库 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML Schema |
Xojo |
XQuery 和 XPath |
XRegExp |
数据库 |
MySQL |
Oracle |
PostgreSQL |
本网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于本网站 |
RSS Feed 和博客 |
PostgreSQL 7.4 及更高版本使用 Henry Spencer 为 Tcl 8.2 开发的完全相同的正则表达式引擎。这意味着 PostgreSQL 支持相同的三种正则表达式风格:Tcl 高级正则表达式、POSIX 扩展正则表达式 和 POSIX 基本正则表达式。与 Tcl 中一样,ARE 是默认值。我对 Tcl 的正则表达式风格的所有评论,如不寻常的模式修饰符和单词边界标记,完全适用于 PostgreSQL。如果你不熟悉 Tcl 的 ARE,你绝对应该查看它们。不过,不幸的是,PostgreSQL 的 regexp_replace 函数不使用与 Tcl 的 regsub 命令相同的替换文本语法。
7.4 之前的 PostgreSQL 版本仅支持 POSIX 扩展正则表达式。如果你要将旧数据库代码迁移到新版本的 PostgreSQL,你可以将 PostgreSQL 的“regex_flavor”运行时参数设置为“extended”,而不是默认的“advanced”,以使 ERE 成为默认值。
PostgreSQL 还支持传统的 SQL LIKE 运算符和 SQL:1999 SIMILAR TO 运算符。它们使用自己的模式语言,这里不讨论。ARE 强大得多,如果你不使用 LIKE 或 SIMILAR TO 不提供的功能,它们并不复杂。
波浪号中缀运算符返回真或假,具体取决于正则表达式是否可以匹配字符串的一部分。例如,'subject' ~ 'regexp' 返回假,而 'subject' ~ '\\w' 返回真。如果正则表达式必须匹配整个字符串,则需要使用 锚点。例如,'subject' ~ '^\\w$' 返回假,而 'subject' ~ '^\\w+$' 返回真。此运算符有 4 种变体
虽然只有大小写敏感性可以通过运算符切换,但所有其他选项都可以使用正则表达式开头的 模式修饰符 设置。模式修饰符覆盖运算符类型。例如,“(?c)regex”强制正则表达式区分大小写。
此运算符最常见的用法是根据列是否匹配正则表达式来选择行,例如
select * from mytable where mycolumn ~* 'regexp'
反斜杠用于转义 PostgreSQL 字符串中的字符。因此,包含反斜杠的正则表达式(如 \w)在作为 PostgreSQL 语句中的字符串文字编写时变为 '\\w'。若要匹配单个反斜杠,您需要正则表达式 \\,在 PostgreSQL 中变为 '\\\\'。
使用 substring(string from pattern) 函数,您可以提取字符串或列的一部分。它有两个参数:您想要从中提取文本的字符串和提取的文本应匹配的模式。如果没有匹配项,substring() 返回 null。例如,substring('subject' from 'regexp') 返回 null。如果存在匹配项,并且正则表达式有一个或多个 捕获组,则返回第一个捕获组匹配的文本。例如,substring('subject' from 's(\\w)') 返回“u”。如果存在匹配项,但正则表达式没有捕获组,则返回整个正则表达式匹配项。例如,substring('subject' from 's\\w') 返回“su”。如果正则表达式匹配字符串多次,则仅返回第一个匹配项。由于 substring() 函数不接受“标志”参数,因此您需要使用 模式修饰符 切换任何匹配选项。
此函数特别适用于从列中提取信息。例如,要为每一行从列 mycolumn 中提取第一个数字,请使用
select substring(mycolumn from '\d+') from mytable
使用 regexp_replace(subject, pattern, replacement [, flags]),您可以在字符串中替换正则表达式匹配项。如果您省略 flags 参数,则正则表达式将区分大小写地应用,并且只替换第一个匹配项。如果您将 flags 设置为 'i',则正则表达式将不区分大小写地应用。'g' 标志(表示“全局”)将导致替换字符串中的所有正则表达式匹配项。您可以将这两个标志组合为 'gi'。
您可以在替换文本中使用反向引用 \1 到 \9,以将正则表达式中捕获组匹配的文本重新插入到正则表达式中。\& 重新插入整个正则表达式匹配项。请记住在文字字符串中将反斜杠加倍。
例如,regexp_replace('subject', '(\w)\w', '\&\1', 'g') 返回 'susbjbecet'。
PostgreSQL 8.3 及更高版本有两个新函数,可沿着正则表达式匹配项拆分字符串。regexp_split_to_table(subject, pattern[, flags]) 将拆分的字符串作为新表返回。regexp_split_to_array(subject, pattern[, flags]) 将拆分的字符串作为文本数组返回。如果正则表达式没有找到任何匹配项,这两个函数都将返回 subject 字符串。
| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书评 |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
页面 URL:https://regexper.cn/postgresql.html
页面上次更新时间:2021 年 8 月 24 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。