跳转到内容

Oracle 数据库/正则表达式支持

来自维基教科书,开放的书籍,开放的世界

列出使用正则表达式的优势

[编辑 | 编辑源代码]

使用正则表达式搜索、匹配和替换字符串

[编辑 | 编辑源代码]
正则表达式
表达式 描述
锚定字符 ^ 行首
$ 行尾
量词字符 * 匹配 0 次或多次
+ 匹配 1 次或多次
? 匹配 0 次或 1 次
{m} 精确匹配 m 次
{m,} 至少匹配 m 次
{m, n} 至少匹配 m 次,但不超过 n 次
\n 导致前面的表达式重复 n 次
选择和分组 | 分隔选择项,通常与分组运算符 () 一起使用
( ) 将子表达式分组为一个单元,用于选择、量词或反向引用(参见“反向引用”部分)
[char] 表示一个字符列表;字符列表中的大多数元字符被理解为字面量,但字符类、^ 和 - 元字符除外
POSIX 字符 [:alnum:] 字母数字字符
[:alpha:] 字母字符
[:blank:] 空格字符
[:cntrl:] 控制字符(非打印字符)
[:digit:] 数字
[:graph:] 任何 [:punct:], [:upper:], [:lower:], 和 [:digit:] 字符
[:lower:] 小写字母字符
[:print:] 可打印字符
[:punct:] 标点符号字符
[:space:] 空格字符(非打印字符),例如回车符、换行符、垂直制表符和换页符
[:upper:] 大写字母字符
[:xdigit:] 十六进制字符
等价类 = = 嵌入在方括号中的等价类,它匹配一个基本字母及其所有带重音的版本。例如,等价类 '[=a=]' 匹配 ä 和 â。
匹配选项 c 区分大小写匹配
i 不区分大小写匹配
m 将源字符串视为多行,激活锚字符
n 允许句点 (.) 匹配任何换行符
x 忽略空白字符

REGEXP_LIKE

[编辑 | 编辑源代码]

REGEXP_LIKE 执行复杂的正则表达式模式匹配,并支持比 LIKE 更广泛的字符串模式范围。此函数在 10g 中引入。

姓以 T 开头,第二个字符是 'o' 或 'u'

SELECT last_name
FROM   hr.employees
WHERE  REGEXP_LIKE(last_name, '^T[ou]');

姓以 'T' 开头,以 'r' 结尾

select last_name
from   hr.employees
where  REGEXP_LIKE( last_name, '^T.*r$' );

名字是 'Steven' 或 'Stephen'

SELECT first_name
FROM hr.employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');

姓包含双元音字符(例如,'aa'、'ee'、'ii'、'oo'、'uu'),匹配不区分大小写

SELECT last_name
FROM hr.employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i');

REGEXP_INSTR

[编辑 | 编辑源代码]

REGEXP_INSTR 执行复杂的正则表达式模式匹配,并支持比 INSTR 更广泛的字符串模式范围。此函数在 10g 中引入。

显示第一个小写元音字符的位置

SELECT last_name, REGEXP_INSTR(last_name, '[aeiou]')
FROM   hr.employees;

REGEXP_SUBSTR

[编辑 | 编辑源代码]

REGEXP_SUBSTR 执行复杂的正则表达式模式匹配,并支持比 SUBSTR 更广泛的字符串模式范围。此函数在 10g 中引入。

如果姓以 'A' 或 'C' 开头,则提取第一个字符

SELECT last_name, REGEXP_SUBSTR(last_name, '^[AC]')
FROM   hr.employees;

从第 3 个位置开始,从姓中提取 2 个字符

SELECT last_name, REGEXP_SUBSTR(last_name, '..',3)
FROM   hr.employees;

REGEXP_COUNT

[编辑 | 编辑源代码]

REGEXP_COUNT 对值执行计数,它与聚合函数 COUNT 不同。此函数在 11g 中引入。

在姓中查找元音模式的出现次数

SELECT last_name, REGEXP_COUNT( last_name, '[aeiou]' )
FROM   hr.employees;
华夏公益教科书