REGEXP_SUBSTR函數用于為模式搜索字符串,其中模式由與POSIX兼容的正則表達式所指定。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 要搜索的正則表達式。
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是第二個子字符串的內容。