MySQL REGEXP_INSTR() 函数使用指南

MySQL REGEXP_INSTR() 函数从一个字符串中搜索和指定模式匹配的子串并返回的子串的索引。

默认情况下, REGEXP_INSTR() 函数执行不区分大小写的匹配。

REGEXP_INSTR() 语法

这里是 MySQL REGEXP_INSTR() 的语法:

REGEXP_INSTR(str, regexp)
REGEXP_INSTR(str, regexp, position)
REGEXP_INSTR(str, regexp, position, occurrence)
REGEXP_INSTR(str, regexp, position, occurrence, return_option)
REGEXP_INSTR(str, regexp, position, occurrence, return_option, mode)

参数

str
必需的。一个字符串。
regexp
必需的。正则表达式。
position
可选的。开始搜索的起始位置。默认为 1
occurrence
可选的。第几次匹配的内容。默认为 1
return_option
可选的。指定返回哪一种位置索引。如果为 0,返回匹配的子串的第一个字符的位置索引;如果为 1,返回匹配的子串的后面的位置索引。默认为 0.
mode
可选的。执行匹配采用的模式。

匹配模式可以使用下面值中的一个或多个:

  • c: 区分大小写
  • i: 不区分大小写
  • m: 多行匹配模式
  • n: 点 . 可以匹配行结束
  • u: 仅限 unix 行结尾

如果匹配模式存在矛盾的选项,则以最右边的为准。

返回值

REGEXP_INSTR() 函数从一个字符串 str 中搜索和指定模式 regexp 匹配的子串并返回的子串的索引。如果没有匹配到,则返回 NULL

如果 str 或者 regexpNULLREGEXP_INSTR() 将返回 NULL

REGEXP_INSTR() 示例

以下语句用来找出字符串 '123 abc 456 def' 中的第一组连续的数字的索引。

SELECT REGEXP_INSTR('123 abc 456 def', '\\d+');
+-----------------------------------------+
| REGEXP_INSTR('123 abc 456 def', '\\d+') |
+-----------------------------------------+
|                                       1 |
+-----------------------------------------+

如果想找出字符串 '123 abc 456 def' 中的第二组连续的数字,请使用下面的语句:

SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 2);
+-----------------------------------------------+
| REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 2) |
+-----------------------------------------------+
|                                             9 |
+-----------------------------------------------+

如果想找出字符串 '123 abc 456 def' 中的第一组连续的数字的后面的索引,请使用下面的语句:

SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 1, 1);
+--------------------------------------------------+
| REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 1, 1) |
+--------------------------------------------------+
|                                                4 |
+--------------------------------------------------+