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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。