当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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