快速入门
教程
工具和语言
示例
参考
书评
正则表达式工具
grep
PowerGREP
RegexBuddy
RegexMagic
通用应用程序
EditPad Lite
EditPad Pro
语言和库
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery 和 XPath
XRegExp
数据库
MySQL
Oracle
PostgreSQL
此网站上的更多内容
简介
正则表达式快速入门
正则表达式教程
替换字符串教程
应用程序和语言
正则表达式示例
正则表达式参考
替换字符串参考
书评
可打印 PDF
关于此网站
RSS Feed 和博客
RegexBuddy—The best regex editor and tester for MySQL developers!

使用 REGEXP 运算符的 MySQL 正则表达式

MySQL 对正则表达式的支持相当有限,但仍然非常有用。MySQL 只有一个允许你使用正则表达式的运算符。这是 REGEXP 运算符,它与 LIKE 运算符的工作方式相同,只是它不使用 _% 通配符,而是使用 POSIX 扩展正则表达式 (ERE)。尽管标准名称中带有“扩展”,但 POSIX ERE 风格按照现代标准来说是一种相当基本的正则表达式风格。不过,它使 REGEXP 运算符比简单的 LIKE 运算符强大且灵活得多。

LIKE 和 REGEXP 运算符之间的一个重要区别在于,LIKE 运算符仅在模式与整个字符串匹配时才返回 True。例如,WHERE testcolumn LIKE 'jg' 仅返回 testcolumn 与 jg 完全相同(可能大小写不同)的行。另一方面,WHERE testcolumn REGEXP 'jg' 将返回 testcolumn 在字符串中任何位置都有 jg 的所有行。使用 WHERE testcolumn REGEXP '^jg$' 仅获取与 jg 完全相同列。与 WHERE testcolumn LIKE 'jg%' 等效的是 WHERE testcolumn REGEXP '^jg'。无需在正则表达式的末尾放置 .*(REGEXP 等效于 LIKE 的 %),因为接受部分匹配。

MySQL 不提供任何 匹配模式。POSIX ERE 不支持正则表达式内的模式修饰符,而 MySQL 的 REGEXP 运算符不提供一种在正则表达式外部指定模式的方法。 匹配所有字符,包括换行符,而 插入符号和美元符号 仅匹配字符串的开头和结尾。换句话说:MySQL 将换行符视为普通字符。如果表的排序规则不区分大小写(这是默认设置),则 REGEXP 运算符不区分大小写地应用正则表达式。如果您将排序规则更改为区分大小写,则 REGEXP 运算符将区分大小写。

请记住,MySQL 支持字符串中的 C 样式转义序列。虽然 POSIX ERE 不支持 \n 等标记来匹配不可打印字符(如换行符),但 MySQL 在其字符串中支持此转义。因此,WHERE testcolumn REGEXP '\n' 会返回 testcolumn 中包含换行符的所有行。MySQL 在解析正则表达式之前将字符串中的 \n 转换为单个换行符字符。这也意味着反斜杠需要转义。匹配单个反斜杠的正则表达式 \\ 在 MySQL 字符串中变为 '\\\\',而匹配美元符号的正则表达式 \$ 在 MySQL 字符串中变为 '\\$'。所有这些都不同于其他数据库,例如 Oracle,它不支持 \n 且不需要转义反斜杠。

要返回列与正则表达式不匹配的行,请使用 WHERE testcolumn NOT REGEXP 'pattern' RLIKE 运算符是 REGEXP 运算符的同义词。WHERE testcolumn RLIKE 'pattern'WHERE testcolumn NOT RLIKE 'pattern'WHERE testcolumn REGEXP 'pattern'WHERE testcolumn NOT REGEXP 'pattern' 相同。我建议您使用 REGEXP 而不是 RLIKE,以避免与 LIKE 运算符混淆。

LIB_MYSQLUDF_PREG

如果您希望在数据库中获得更强大的正则表达式功能,可以考虑使用 LIB_MYSQLUDF_PREG。这是一个 MySQL 用户函数开源库,可导入 PCRE 库。LIB_MYSQLUDF_PREG 仅以源代码形式提供。要使用它,您需要能够将其编译并安装到 MySQL 服务器中。安装此库不会以任何方式更改 MySQL 的内置正则表达式支持。它只是提供了以下附加功能

PREG_CAPTURE 从字符串中提取正则表达式匹配项。PREG_POSITION 返回正则表达式与字符串匹配的位置。PREG_REPLACE 对字符串执行搜索并替换。PREG_RLIKE 测试正则表达式是否与字符串匹配。

所有这些函数都将正则表达式作为其第一个参数。此正则表达式必须格式化为 Perl 正则表达式运算符。例如,要测试 regex 是否不区分大小写地匹配主题,您将使用 MySQL 代码 PREG_RLIKE('/regex/i', subject)。这类似于 PHP 的 preg 函数,它也需要 PHP 字符串中的正则表达式的额外 // 分隔符。

| 快速入门 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML 模式 | Xojo | XQuery 和 XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |