求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL REGEX:基于正则表达式的搜索
593 次浏览
1次  

在本教程中,您将学习如何使用MySQL REGEXP运算符执行基于正则表达式的复杂搜索。

正则表达式简介

正则表达式是描述搜索模式的特殊字符串。 它是一个强大的工具,为您提供一种简洁灵活的方法来识别基于模式的文本字符,例如字符,单词等。

例如,可以使用正则表达式来搜索电子邮件,IP地址,电话号码,社会安全号码或具有特定模式的任何内容。

正则表达式使用其可以由正则表达式处理器解释的自己的语法。 正则表达式广泛应用于从编程语言到数据库(包括MySQL)大部分平台。

使用正则表达式的优点是,不限于在LIKE运算符中基于具有百分号(%)和下划线(_)的固定模式搜索字符串。 使用正则表达式,有更多的元字符来构造灵活的模式。

正则表达式的缩写是regex或regexp。

MySQL REGEXP运算符

MySQL适应了Henry Spencer实现的正则表达式。MySQL允许使用REGEXP运算符在SQL语句中匹配模式。

下面说明了WHERE子句中REGEXP运算符的语法:

SELECT
column_list
FROM
table_name
WHERE
string_column REGEXP pattern;

此语句执行string_column与模式pattern匹配。

如果string_column中的值与模式pattern匹配,则WHERE子句中的表达式将返回1,否则返回0。

如果string_column或pattern为NULL,则结果为NULL。

除了REGEXP运算符之外,可以使用RLIKE运算符,这是REGEXP运算符的同义词。

REGEXP运算符的否定形式是NOT REGEXP。

MySQL REGEXP示例

假设想找出名字以字母A,B或C开头的产品。可以使用SELECT语句中的正则表达式如下:

SELECT
productname
FROM
products
WHERE
productname REGEXP '^(A|B|C)'
ORDER BY productname;

执行上面查询语句,得到以下结果 -

+--------------------------------+
| productname |
+--------------------------------+
| America West Airlines B757-200 |
| American Airlines: B767-300 |
| American Airlines: MD-11S |
| ATA: B757-300 |
| Boeing X-32A JSF |
| Collectable Wooden Train |
| Corsair F4U ( Bird Cage) |
+--------------------------------+
7 rows in set

该模式允许查询名称以A,B或C开头的产品。

字符^表示从字符串的开头匹配。

字符|如果无法匹配,则搜索替代方法。

下表说明了正则表达式中一些常用的元字符和构造。

要查找名称以a开头的产品,您可以在名称开头使用“^”进行匹配,如下查询语句:

SELECT
productname
FROM
products
WHERE
productname REGEXP '^a';

执行上面查询语句,得到以下结果 -

+--------------------------------+
| productname |
+--------------------------------+
| American Airlines: B767-300 |
| America West Airlines B757-200 |
| ATA: B757-300 |
| American Airlines: MD-11S |
+--------------------------------+
4 rows in set

如果要使REGEXP运算符以区分大小写的方式比较字符串,可以使用BINARY运算符将字符串转换为二进制字符串。

因为MySQL比较二进制字节逐字节而不是逐字符。 这允许字符串比较区分大小写。

例如,以下语句只匹配开头为大写“C”的产品名称。

SELECT
productname
FROM
products
WHERE
productname REGEXP BINARY '^C';

执行上面查询语句,得到以下结果 -

+--------------------------+
| productname |
+--------------------------+
| Collectable Wooden Train |
| Corsair F4U ( Bird Cage) |
+--------------------------+
2 rows in set

要找到以f结尾的产品,您可以使用’$f‘来匹配字符串的末尾。

SELECT
productname
FROM
products
WHERE
productname REGEXP 'f$';

执行上面查询语句,得到以下结果 -

+------------------+
| productname |
+------------------+
| Boeing X-32A JSF |
+------------------+
1 row in set

要查找其名称包含“ford”的产品,请使用以下查询:

SELECT
productname
FROM
products
WHERE
productname REGEXP 'ford';

执行上面查询语句,得到以下结果 -

+----------------------------------+
| productname |
+----------------------------------+
| 1968 Ford Mustang |
| 1969 Ford Falcon |
| 1940 Ford Pickup Truck |
| 1911 Ford Town Car |
| 1932 Model A Ford J-Coupe |
| 1926 Ford Fire Engine |
| 1913 Ford Model T Speedster |
| 1934 Ford V8 Coupe |
| 1903 Ford Model A |
| 1976 Ford Gran Torino |
| 1940s Ford truck |
| 1957 Ford Thunderbird |
| 1912 Ford Model T Delivery Wagon |
| 1940 Ford Delivery Sedan |
| 1928 Ford Phaeton Deluxe |
+----------------------------------+
15 rows in set

要查找名称只包含10个字符的产品,可以使用’^‘和’$‘来匹配产品名称的开头和结尾,并重复{10}次任何字符.,作为以下查询:

SELECT
productname
FROM
products
WHERE
productname REGEXP '^.{10}$';

执行上面查询语句,得到以下结果 -

+-------------+
| productname |
+-------------+
| HMS Bounty |
| Pont Yacht |
+-------------+
2 rows in set

在本教程中,您已学习如何使用具有正则表达式的MySQL REGEXP运算符查询数据。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



593 次浏览
1次
 捐助