REGEXP_SUBSTR函數用於為模式搜尋字串,其中模式由與POSIX相容的Regex所指定。REGEXP_SUBSTR函數返回的字串與在調用函數中所指定的模式比對。
文法
TEXT REGEXP_SUBSTR
(
srcstr TEXT,
pattern TEXT,
position INT DEFAULT 1,
occurrence INT DEFAULT 1,
modifier TEXT DEFAULT NULL,
subexpression INT DEFAULT 0
) 參數
| 參數名稱 | 描述 |
| srcstr | srcstr指定要搜尋的字串。 |
| Pattern | pattern 用於指定REGEXP_SUBSTR 要搜尋的Regex。 |
| position | position指定表明在源字串中起始位置的整數值。預設值為1。 |
| occurrence | 如果在搜尋字串時, 有一個以上的模式出現,那麼occurrence則用於指定返回的匹配資訊。預設值為1. |
| modifier | modifier用於指定控制模式比對行為的值。預設值為NULL。關於PolarDB所支援的修改器的完整列表,請參見PostgreSQL核心檔案。 |
| subexpression | subexpression是一個整數值,用於識別由REGEXP_SUBSTR返回的pattern部分。subexpression的預設值為0。 如果我們給subexpression指定一個值,那麼在pattern中必須包括一組(或多組)的括弧,來孤立正在搜尋的值的部分。由subexpression指定的值表明了應被返回的括弧組。例如,如果subexpression為2,那麼REGEXP_SUBSTR將返回第二組括弧的位置。 |
樣本
在下面的簡單樣本中,REGEXP_SUBSTR搜尋的字串為第一組包含3個連續數位電話號碼:
postgres=# SELECT REGEXP_SUBSTR('800-555-****', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
regexp_substr
---------------
800
(1 row) 它定位了第一次出現的3個數字,並返回字串(8 0 0)。如果我們要修改命令使其檢索第二次出現的三個連續數字,方法如下:
postgres=# SELECT REGEXP_SUBSTR('800-555-****', '[0-9][0-9][0-9]', 1, 2) FROM DUAL;
regexp_substr
---------------
555
(1 row) REGEXP_SUBSTR返回的555是第二個子字串的內容。