在 Oracle 数据库中使用正则表达式
0. 引言
本文介绍 Oracle 数据库的正则表达式支持。本文涵盖以下主题:
- 什么是正则表达式?
- Oracle 数据库正则表达式支持
- 用于正则表达式的 Oracle 数据库 SQL 函数
- 正则表达式中支持的元字符
- 构建正则表达式
1. 什么是正则表达式?
正则表达式使用标准化语法约定指定要在字符串数据中搜索的模式。正则表达式可以指定复杂的字符序列模式。例如,以下正则表达式:
a(b|c)d
搜索模式:“a”,后跟“b”或“c”,最后跟“d”。此正则表达式同时匹配“abd”和“acd”。
正则表达式使用两种类型的字符指定:
- 元字符——指定执行搜索的算法的运算符。
- 文字——要搜索的实际字符。
2. Oracle 数据库正则表达式支持
Oracle 数据库实现了符合 POSIX 扩展正则表达式 (ERE) 规范的正则表达式支持。
正则表达式支持是通过一组 Oracle 数据库 SQL 函数实现的,这些函数允许您搜索和操作字符串数据。您可以在任何使用 Oracle 数据库 SQL 的环境中使用这些函数。有关详细信息,请参阅本章后面的“用于正则表达式的 Oracle 数据库 SQL 函数”。
Oracle 数据库支持正则表达式中使用的一组常见元字符。支持的元字符和相关功能的行为在“正则表达式中支持的元字符”中进行了描述。
业界支持正则表达式的工具之间对元字符的解释有所不同。如果您要将正则表达式从其他环境移植到 Oracle 数据库,请确保正则表达式语法受支持并且行为符合您的预期。
3. 用于正则表达式的 Oracle 数据库 SQL 函数
数据库提供了一组 SQL 函数,允许您使用正则表达式搜索和操作字符串。您可以在任何保存字符数据的数据类型(例如 CHAR、NCHAR、CLOB、NCLOB、NVARCHAR2 和 VARCHAR2)上使用这些函数。
正则表达式必须用单引号括起来。这样做可以确保 SQL 函数解释整个表达式,并可以提高代码的可读性。
下表给出了每个正则表达式函数的简要说明。
SQL Function | Description |
---|---|
REGEXP_LIKE | 该函数在字符列中搜索模式。在查询的 WHERE 子句中使用此函数可返回与您指定的正则表达式匹配的行。 |
REGEXP_REPLACE | 此函数在字符列中搜索模式,并用您指定的模式替换每次出现的该模式。 |
REGEXP_INSTR | 该函数在字符串中搜索给定的正则表达式模式。您指定要查找的出现位置以及搜索的起始位置。此函数返回一个整数,指示在字符串中找到匹配项的位置。 |
REGEXP_SUBSTR | 此函数返回与您指定的正则表达式模式匹配的实际子字符串。 |
4. 正则表达式中支持的元字符
下表列出了支持在传递给 SQL 正则表达式函数的正则表达式中使用的元字符。有关这些元字符的匹配行为的详细信息在“构造正则表达式”中给出。
Metacharacter Syntax | Operator Name | Description |
---|