當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


MySQL REGEXP_INSTR方法用法及代碼示例


MySQL 的 REGEXP_INSTR(~) 方法返回與正則表達式 pat 匹配的子字符串的起始索引。

參數

1. expr | string

要檢查是否與正則表達式模式匹配的字符串。

2. pat | regular expression

用於匹配的正則表達式模式。

3. pos | integer | optional

expr 中開始搜索的位置。默認為 1

4. occurrence | number | optional

返回索引的匹配項的出現次數。默認為 1

5. return_option | 0 or 1 | optional

0 :返回匹配子字符串的第一個字符的位置。默認行為。

1 :返回匹配子字符串後麵的字符的位置。

6. match_type | string | optional

指定如何執行匹配。可以指定多個字符,但是,如果提供的match_types 之間存在矛盾,則右側的match_type 優先。

match_type

意義

c

區分大小寫的匹配。

i

不區分大小寫的匹配。

m

Multiple-line模式。識別字符串中的行終止符。默認行為是僅在字符串表達式的開頭和結尾匹配行終止符。

n

. 字符匹配行終止符。默認情況下,. 匹配在行尾停止。

u

Unix-only 行結尾。僅換行符被識別為以 .^$ 匹配運算符結尾的行。

返回值

返回值取決於以下情況:

案子

返回值

未找到匹配項

0

return_option=0

匹配子串的第一個字符的索引位置。

return_option=1

匹配子字符串後麵的字符的索引位置。

例子

考慮下表有關一些學生的信息:

student_id

名稱

名字

day_enrolled

年齡

用戶名

1

Sky

Towner

2015-12-03

17

stowner1

2

Ben

Davis

2016-04-20

19

bdavis2

3

Travis

Apple

2018-08-14

18

tapple3

4

Arthur

David

2016-04-01

16

adavid4

5

Benjamin

Town

2014-01-01

17

btown5

可以使用此處的代碼創建上述示例表。

基本用法

要返回學生名字中第一次出現 ie 的索引位置:

SELECT fname, REGEXP_INSTR(fname,'[ie]')
FROM students;



+----------+----------------------------+
| fname    | REGEXP_INSTR(fname,'[ie]') |
+----------+----------------------------+
| Sky      |                          0 |
| Ben      |                          2 |
| Travis   |                          5 |
| Arthur   |                          0 |
| Benjamin |                          2 |
+----------+----------------------------+

位置

從位置 3 開始正則表達式匹配:

SELECT fname, REGEXP_INSTR(fname,'[ie]', 3, 1, 0, 'c')
FROM students;



+----------+------------------------------------------+
| fname    | REGEXP_INSTR(fname,'[ie]', 3, 1, 0, 'c') |
+----------+------------------------------------------+
| Sky      |                                        0 |
| Ben      |                                        0 |
| Travis   |                                        5 |
| Arthur   |                                        0 |
| Benjamin |                                        7 |
+----------+------------------------------------------+

請注意,3 位置之前出現的任何 ie 都將被忽略。

出現次數

要返回學生名字中第二次出現的 ie

SELECT fname, REGEXP_INSTR(fname, '[ie]', 1, 2, 0, 'c')
FROM students;



+----------+-------------------------------------------+
| fname    | REGEXP_INSTR(fname, '[ie]', 1, 2, 0, 'c') |
+----------+-------------------------------------------+
| Sky      |                                         0 |
| Ben      |                                         0 |
| Travis   |                                         0 |
| Arthur   |                                         0 |
| Benjamin |                                         7 |
+----------+-------------------------------------------+

請注意,隻有 Benjaminfname 中出現了兩次 ie

返回選項

我們正在使用的 students 表的提醒:

student_id

名稱

名字

day_enrolled

年齡

用戶名

1

Sky

Towner

2015-12-03

17

stowner1

2

Ben

Davis

2016-04-20

19

bdavis2

3

Travis

Apple

2018-08-14

18

tapple3

4

Arthur

David

2016-04-01

16

adavid4

5

Benjamin

Town

2014-01-01

17

btown5

設置return option=1返回匹配後字符的位置:

SELECT fname, REGEXP_INSTR(fname,'[ie]', 1, 1, 1, 'c')
FROM students;



+----------+------------------------------------------+
| fname    | REGEXP_INSTR(fname,'[ie]', 1, 1, 1, 'c') |
+----------+------------------------------------------+
| Sky      |                                        0 |
| Ben      |                                        3 |
| Travis   |                                        6 |
| Arthur   |                                        0 |
| Benjamin |                                        3 |
+----------+------------------------------------------+

請注意,我們返回名字中第一次出現 ie 之後的字符的索引位置。

比賽類型

要通過指定 match_type='c' 執行區分大小寫的匹配:

SELECT fname, REGEXP_INSTR(fname,'[a]', 1, 1, 0, 'c')
FROM students;



+----------+-----------------------------------------+
| fname    | REGEXP_INSTR(fname,'[a]', 1, 1, 0, 'c') |
+----------+-----------------------------------------+
| Sky      |                                       0 |
| Ben      |                                       0 |
| Travis   |                                       3 |
| Arthur   |                                       0 |
| Benjamin |                                       5 |
+----------+-----------------------------------------+

請注意,我們為 Arthur 返回 0,因為我們隻查找小寫 a 的匹配項。

相關用法


注:本文由純淨天空篩選整理自Arthur Yanagisawa大神的英文原創作品 MySQL | REGEXP_INSTR method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。