Mysqli 简明教程

MySQLi - Regexps

您已使用 LIKE …​% 看到 MySQL 模式匹配。MySQL 支持另一种基于正则表达式和 REGEXP 运算符的模式匹配操作。如果您熟悉 PHP 或 PERL,那么对您来说理解起来很简单,因为这种匹配与那些脚本正则表达式非常相似。

以下是可与 REGEXP 运算符一起使用的模式表。

Pattern

What the pattern matches

^

Beginning of string

$

End of string

.

Any single character

[…​]

方括号内列出的任何字符

[^…​]

方括号内未列出的任何字符

p1

p2

p3

交替;与模式 p1、p2 或 p3 中的任何一个匹配

*

前一个元素的多个实例

+

前一个元素的一个或多个实例

{n}

前一个元素的 n 个实例

{m,n}

前一个元素的 m 到 n 个实例

Examples

现在,基于上表,您可以设计各种类型的 SQL 查询以满足您的要求。这里我列出一些供您理解。假设我们有一张名为 tutorials_inf 的表,它有一个名为 name 的字段−

查找所有以“sa”开头的名称的查询

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';

示例输出如下所示 −

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

查找所有以“ai”结尾的名称的查询

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';

示例输出如下所示 −

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

查找包含“a”的所有名称的查询

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';

示例输出如下所示 −

+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  3 | ram   |
|  4 | johar |
+----+-------+
3 rows in set (0.00 sec)

查找所有以元音开头的名称的查询

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';