正規表示式工具 |
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 未提供的功能,它們並不會更複雜。
波浪號中綴運算子會傳回 true 或 false,具體取決於正則表示式是否可以比對字串的一部分。例如,'subject' ~ 'regexp' 傳回 false,而 'subject' ~ '\\w' 傳回 true。如果正規表示式必須比對整個字串,您需要使用 錨點。例如,'subject' ~ '^\\w$' 傳回 false,而 'subject' ~ '^\\w+$' 傳回 true。此運算子有 4 種變化
雖然只有區分大小寫可以由運算子切換,但所有其他選項都可以在正規表示式的開頭使用 模式修改器 來設定。模式修改器會覆寫運算子類型。例如,‘(?c)regex’ 強制 regex 區分大小寫。
此運算子最常見的用法是根據欄位是否符合正規表示式來選取列,例如
select * from mytable where mycolumn ~* 'regexp'
反斜線用於跳脫 PostgreSQL 字串中的字元。因此,包含反斜線的正規表示式,例如 \w,在寫成 PostgreSQL 陳述式中的文字字串時會變成 '\\w'。若要比對單一文字反斜線,您需要正規表示式 \\,在 PostgreSQL 中會變成 '\\\\'。
使用 substring(字串 from 樣式) 函數,您可以擷取字串或欄位的部分。它需要兩個參數:您要從中擷取文字的字串,以及擷取的文字應符合的樣式。如果沒有比對,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(主旨, 樣式, 替換 [, 旗標]),您可以在字串中替換正規表示式比對。如果您省略旗標參數,則正規表示式會區分大小寫地套用,且只會替換第一個比對。如果您將旗標設定為 '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]) 會將分割的字串傳回為一個文字陣列。如果正規表示式找不到任何比對,這兩個函式都會傳回主旨字串。
| 快速入門 | 教學 | 工具與語言 | 範例 | 參考 | 書籍評論 |
| 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 |
頁面網址:https://regular-expressions.dev.org.tw/postgresql.html
頁面最後更新時間:2021 年 8 月 24 日
網站最後更新時間:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。