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 |
意義 |
---|---|
|
區分大小寫的匹配。 |
|
不區分大小寫的匹配。 |
|
Multiple-line模式。識別字符串中的行終止符。默認行為是僅在字符串表達式的開頭和結尾匹配行終止符。 |
|
|
|
Unix-only 行結尾。僅換行符被識別為以 |
返回值
返回值取決於以下情況:
案子 |
返回值 |
---|---|
未找到匹配項 |
0 |
|
匹配子串的第一個字符的索引位置。 |
|
匹配子字符串後麵的字符的索引位置。 |
例子
考慮下表有關一些學生的信息:
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 |
可以使用此處的代碼創建上述示例表。
基本用法
要返回學生名字中第一次出現 i
或 e
的索引位置:
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
位置之前出現的任何 i
或 e
都將被忽略。
出現次數
要返回學生名字中第二次出現的 i
或 e
:
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 |
+----------+-------------------------------------------+
請注意,隻有 Benjamin
在 fname
中出現了兩次 i
或 e
。
返回選項
我們正在使用的 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 |
+----------+------------------------------------------+
請注意,我們返回名字中第一次出現 i
或 e
之後的字符的索引位置。
比賽類型
要通過指定 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
的匹配項。
相關用法
- MySQL REGEXP_INSTR()用法及代碼示例
- MySQL REGEXP_SUBSTR()用法及代碼示例
- MySQL REGEXP_LIKE方法用法及代碼示例
- MySQL REGEXP_REPLACE方法用法及代碼示例
- MySQL REGEXP_REPLACE()用法及代碼示例
- MySQL REGEX用法及代碼示例
- MySQL REPEAT()用法及代碼示例
- MySQL REPLACE()用法及代碼示例
- MySQL REPEAT方法用法及代碼示例
- MySQL REPLACE方法用法及代碼示例
- MySQL REVERSE()用法及代碼示例
- MySQL REVERSE方法用法及代碼示例
- MySQL ROUND()用法及代碼示例
- MySQL RADIANS方法用法及代碼示例
- MySQL RPAD()用法及代碼示例
- MySQL RLIKE用法及代碼示例
- MySQL RIGHT JOIN用法及代碼示例
- MySQL ROW_NUMBER()用法及代碼示例
- MySQL RTRIM方法用法及代碼示例
- MySQL RIGHT()用法及代碼示例
- MySQL RADIANS()用法及代碼示例
- MySQL ROUND方法用法及代碼示例
- MySQL RAND()用法及代碼示例
- MySQL RIGHT方法用法及代碼示例
- MySQL RPAD方法用法及代碼示例
注:本文由純淨天空篩選整理自Arthur Yanagisawa大神的英文原創作品 MySQL | REGEXP_INSTR method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。