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 执行复杂的正则表达式模式匹配,并支持比 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 执行复杂的正则表达式模式匹配,并支持比 INSTR 更广泛的字符串模式范围。此函数在 10g 中引入。
显示第一个小写元音字符的位置
SELECT last_name, REGEXP_INSTR(last_name, '[aeiou]')
FROM hr.employees;
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 对值执行计数,它与聚合函数 COUNT 不同。此函数在 11g 中引入。
在姓中查找元音模式的出现次数
SELECT last_name, REGEXP_COUNT( last_name, '[aeiou]' )
FROM hr.employees;