全部產品
Search
文件中心

PolarDB:REGEXP_INSTR

更新時間:Jul 06, 2024

REGEXP_INSTR用於為POSIX式的Regex搜尋字串。這個函數返回的是字串中的匹配內容的位置資訊。

文法

INTEGER REGEXP_INSTR
(
  srcstr        TEXT, 
  pattern       TEXT, 
  position      INT  DEFAULT 1,
  occurrence    INT  DEFAULT 1,
  returnparam   INT  DEFAULT 0,
  modifier      TEXT DEFAULT NULL,
  subexpression INT  DEFAULT 0,
)         

參數

參數名稱描述
srcstrsrcstr指定要搜尋的字串。
patternpattern指定REGEXP_INSTR 函數要搜尋的Regex。
positionposition指定表明在源字串中起始位置的整數值。預設值為1。
occurrence如果在搜尋字串時, 有一個以上的模式出現,那麼occurrence則用於指定返回的匹配資訊。預設值為1.
returnparamreturnparam是一個整數值,用於指定REGEXP_INSTR應該返回的字串中的位置。預設值為0。可以指定下列內容:
  • 指定0來返回字串中第一個與pattern匹配的字元位置。
  • 指定一個大於0的值來返回pattern結尾後的第一個字元位置。
modifiermodifier用於指定控制模式比對行為的值。預設值為NULL。關於PolarDB所支援的修改器的完整列表,請參見PostgreSQL核心檔案
subexpressionsubexpression是一個整數值,用於識別由REGEXP_INSTR返回的pattern部分。subexpression的預設值為0。

如果我們給subexpression指定一個值,那麼在pattern中必須包括一組(或多組)的括弧,來孤立正在搜尋的值的部分。由subexpression指定的值表明了應被返回的括弧組。例如,如果subexpression為2,那麼REGEXP_INSTR將返回第二組括弧的位置。

樣本

在下列簡單的樣本中,REGEXP_INSTR用於搜尋包含電話號碼的字串。 這個字串為第一次出現的包含3個連續數位模式:

postgres=# SELECT REGEXP_INSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 1) FROM DUAL;
 regexp_instr 
--------------
            1
(1 row)        

樣本中命令了REGEXP_INSTR返回第一次出現的位置。如果我們要修改命令使其返回三個連續數位第二次出現的起始位置,方法如下:

postgres=# SELECT REGEXP_INSTR('800-555-1212', '[0-9][0-9][0-9]', 1, 2) FROM DUAL;
 regexp_instr 
--------------
            5
(1 row)