Mysql 简明教程

MySQL - REGEXP_INSTR() Function

MySQL 支持多种模式匹配操作来从庞大的数据库表中检索筛选后的结果集。但是,使用正则表达式进行模式匹配是执行复杂搜索的强大方式。

正则表达式在技术上定义为代表输入文本中模式的一系列字符。它用于使用某些模式查找或替换文本字符串;该模式可以是单个字符、多个字符或单词等。

MySQL 中的这些正则表达式提供了各种函数和操作符,以便轻松执行搜索操作。这样一个功能是 regexp_instr() 功能。

MySQL REGEXP_INSTR() Function

MySQL regexp_instr() 函数用于匹配指定模式与字符串或数据库表中的数据。此函数返回与指定模式匹配的字符串子字符串的起始索引,如果没有匹配项则返回 0,如果字符串或模式为 NULL 则返回 NULL。此字符串的字符索引从 1 开始。

Syntax

以下是 MySQL regexp_instr() 函数的语法 -

REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])

其中 expr 是要执行搜索的字符串,pat 是要搜索的模式/正则表达式。除了表达式和字符串值外,此方法还接受以下可选参数。

Parameters

regexp_instr() 函数采用以下参数值 -

  1. expr: 在其中执行搜索的字符串

  2. pattern: 在字符串中搜索的模式

以下是可传给此函数的可选参数 -

  1. pos: 在 expr 中开始搜索的位置。如果省略,则默认为 1。

  2. occurrence: 要搜索的匹配项的第几个出现。如果省略,则默认为 1。

  3. return_option: 要返回的位置类型。如果此值为 0,则 REGEXP_INSTR() 会返回匹配子字符串第一个字符的位置。如果此值为 1,则 REGEXP_INSTR() 会返回匹配子字符串后面的位置。如果省略,则默认为 0。

  4. *match_type:*这是一个字符串,由各种字符组成,代表了匹配期望的特征,可包含其中一个或全部字符。以下是用于指定匹配类型的各种字符。

Example

在此示例中,我们使用 MySQL REGEXP_INSTR() 函数对一个简单字符串执行搜索操作 −

SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'To') AS RESULT;

在第 9 个索引处找到了模式“To” −

如果没有在字符串中找到匹配项,则返回值为“0” −

SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'xx') AS RESULT;

输出如下:

Example

我们还可以将 optional arguments 传递给此函数,并观察结果。此处,搜索开始位置从 5 开始,查找在该位置后的第 2 个出现的“T”。由于返回值选项设置为 1,因此返回匹配项之后的位置。 −

SELECT REGEXP_INSTR('Welcome To Tutorialspoint!', 'T', 5, 2, 1) AS RESULT;

Output

输出如下:

Example

以下查询在提供的字符串“9848032919”中搜索任意字母字符的位置。如果找到,则返回 1。否则返回 0。

SELECT REGEXP_INSTR('9848032919', '[[:alpha:]]');

Output

执行上述查询将产生以下输出:

Example

以下查询在提供的字符串中搜索“town”或“city”的位置 −

SELECT REGEXP_INSTR('Vishakapatnam is city of destiny ', 'town|city')
As Result;

Output

以上查询的输出如下所示:

Example

如果传递给此函数的前两个参数中的任何一个是 NULL,则此函数会返回 NULL。此处,我们将“NULL”作为搜索模式传递。

SELECT REGEXP_INSTR('Tutorialspoint', NULL)
As Result;

如果我们编译并运行查询,则结果会生成如下 −

在以下查询中,我们正在向字符串参数传递“NULL”。

SELECT REGEXP_INSTR(NULL, 'to')
As Result;

当我们执行以上查询时,输出如下 −

Example

在另一个示例中,让我们使用 REGEXP_INSTR() 函数对名为 CUSTOMERS 的数据库表执行搜索操作。首先,让我们使用以下查询创建表 −

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

使用以下 INSERT 查询在上述已创建的表中插入一些记录 −

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

执行以下查询以显示 CUSTOMERS 表中存在的所有记录 −

Select * from CUSTOMERS;

以下为 CUSTOMERS 表 −

以下查询选择从 CUSTOMERS 表中的 NAME 列中以字母“K”开头的字符串的第一个出现的位置 −

SELECT REGEXP_INSTR(NAME, '^K')
AS RESULT FROM CUSTOMERS;

如我们在以下输出中看到的,NAME 列中有三个以字母 K 开头的字符串。

Client Program

我们还可以使用客户端程序(例如 PHP、Node.js、Java、Python)执行 MySQL REGEXP_INSTR() 函数,以将指定模式与字符串或数据库表中的数据进行匹配。

Syntax

以下是此操作在各种编程语言中的语法 −

Example

以下是这些程序 −