MySQL REGEXP_INSTR() Function
In MySQL, the REGEXP_INSTR() function searches a string for a substring that match a specified regular expression and returns the index of the substring.
By default, the REGEXP_INSTR() function performs case-insensitive matching.
REGEXP_INSTR() Syntax
REGEXP_INSTR() Here is the syntax for MySQL :
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)
Parameters
str- Required. The string to search.
regexp- Required. The Regular expression.
position- Optional. The starting position to start the search. The default is
1. occurrence- Optional. The first number of matches. The default is
1. return_option- Optional. It indicates which positional index to return. Returns the position index of the first character of the matched substring if it is
0; Returns the position index of the following character of the matched substring if it is1. The default is0. mode- Optional. The match mode. It indicates how to perform matching.
mode can be one or more values in the followings:
c: Case-sensitivei: Case-insensitivem: Multi-line match patternn: The dot.can match end of lineu: Unix line endings only
If there are conflicting options in mode, the rightmost one takes precedence.
Return value
The REGEXP_INSTR() function returns the index of a substring that matches the gave regular expression. This function returns NULL if there is no match.
REGEXP_INSTR() will returns NULL if str or regexp is NULL.
REGEXP_INSTR() Examples
The following statement is used to get the index of the first substring that has only numbers in the string '123 abc 456 def'.
SELECT REGEXP_INSTR('123 abc 456 def', '\\d+');
+-----------------------------------------+
| REGEXP_INSTR('123 abc 456 def', '\\d+') |
+-----------------------------------------+
| 1 |
+-----------------------------------------+If you want to get the second substring that has only numbers, use the following statement:
SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 2);
+-----------------------------------------------+
| REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 2) |
+-----------------------------------------------+
| 9 |
+-----------------------------------------------+If you want to get the index after the first matched substring in '123 abc 456 def', use the following statement:
SELECT REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 1, 1);
+--------------------------------------------------+
| REGEXP_INSTR('123 abc 456 def', '\\d+', 1, 1, 1) |
+--------------------------------------------------+
| 4 |
+--------------------------------------------------+