| 正規表示式工具 |
| 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.tutorial.tw/postgresql.html
頁面最後更新時間:2021 年 8 月 24 日
網站最後更新時間:2024 年 3 月 15 日
版權所有 © 2003-2024 Jan Goyvaerts。保留所有權利。