正则表达式是描述搜索模式的特殊字符串。它是一个功能强大的工具,可以根据模式为您提供简明灵活的方法来识别文本字符串,例如字符和单词。
例如,您可以使用正则表达式来搜索电子邮件,IP地址,电话号码,社会安全号码或具有特定模式的任何内容。
正则表达式使用自己的语法,可以由正则表达式处理器解释。正则表达式广泛用于从编程语言到包括MySQL在内的数据库的几乎平台中。
使用正则表达式的优点是,您不仅可以根据
LIKE
运算符中带百分号(%)和下划线(_)的固定模式搜索字符串。正则表达式具有更多的元字符来构造灵活的模式。
使用正则表达式的缺点是很难理解和维护这种复杂的模式。因此,您应在SQL语句的注释中描述正则表达式的含义。此外,如果在正则表达式中使用复杂模式,则在某些情况下,数据检索的速度会降低。
正则表达式的缩写是regex或regexp。
MySQL REGEXP运算符
MySQL适应
Henry Spencer
实现的正则表达式。MySQL允许您使用
REGEXP
运算符在SQL语句中匹配模式。
以下说明
REGEXP
了
WHERE
子句中运算符 的语法:
SELECT
column_list
table_name
WHERE
string_column REGEXP pattern;
此语句执行
string_column
对
pattern
的模式匹配。
如果
string_column
匹配的值为
WHERE
子句中
pattern
的表达式返回true,否则返回false。
如果
string_column
或者
pattern
是
NULL
,结果是
NULL
。
除了
REGEXP
运算符之外,您还可以使用
RLIKE
运算符,它是运算符的同义词
REGEXP
。
REGEXP
运营商的否定形式是
NOT REGEXP
。
MySQL REGEXP示例
假设您要查找姓氏以字符A,B或C开头的所有产品。您可以在以下
SELECT
语句中使用正则表达式:
SELECT
productname
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 (0.00 sec)
模式允许您查找名称以A,B或C开头的产品。
字符^表示从字符串的开头匹配。
字符| 意味着如果一个匹配不匹配则搜索替代方案。
下表说明了正则表达式中一些常用的元字符和构造。
匹配搜索字符串开头的位置
匹配搜索字符串结果的位置
匹配任何字符
匹配方括号内指定的任何字符
匹配方括号内未指定的任何字符
p1|p2
匹配任何模式p1或p2
匹配前面的字符零次或多次
匹配前一个字符一次或多次
匹配前一个字符的n个实例
{m,n}
匹配从前一个字符的m到n个实例
要查找名称以
a
字符开头的产品,请使用元字符
'^'
在名称的开头匹配:
SELECT
productname
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 (0.00 sec)
如果你想
REGEXP
操作员在大小写敏感的方式比较字符串,则可以使用二进制运算符来投一个字符串转换为二进制字符串。
因为MySQL逐字节而不是逐字符地比较二进制字符串。这允许字符串比较区分大小写。
例如,以下语句仅匹配
"C"
产品名称开头的大写。
SELECT
productname
products
WHERE
productname REGEXP BINARY '^C';
+--------------------------+
| productname |
+--------------------------+
| Collectable Wooden Train |
| Corsair F4U ( Bird Cage) |
+--------------------------+
2 rows in set (0.00 sec)
要查找名称以f结尾的产品,您可以使用
'f$'
匹配字符串的结尾。
SELECT
productname
products
WHERE
productname REGEXP 'f$';
+------------------+
| productname |
+------------------+
| Boeing X-32A JSF |
+------------------+
1 row in set (0.00 sec)
要查找名称中包含单词的产品
"ford"
,请使用以下查询:
SELECT
productname
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 (0.00 sec)
要查找名称中包含10个字符的产品,请使用“
^'
和”
$
来匹配产品名称的开头和结尾,并在中间重复
{10}
任何字符的
.'
时间,如以下查询所示:
SELECT
productname
products
WHERE
productname REGEXP '^.{10}$';
+-------------+
| productname |
+-------------+
| HMS Bounty |
| Pont Yacht |
+-------------+
2 rows in set (0.00 sec)
在本教程中,您学习了如何使用带有正则表达式的MySQL REGEXP运算符来查询数据。
MySQL LIKE
新手教程所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等均在网上搜集。
新手教程提供的内容仅用于个人学习、研究或欣赏。我们不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,予以删除。