GBase 8c regexp函数功能说明

发布时间:2026/6/9 17:18:08
GBase 8c regexp函数功能说明
一、序言本文基于 GBase 兼容 Oracle 的 5 大正则系列函数测试用例整理覆盖 REGEXP_LIKE、REGEXP_COUNT、REGEXP_INSTR、REGEXP_SUBSTR、REGEXP_REPLACE完全对标 Oracle 数据库正则语法、参数规则、匹配标记i/m/n/in/im、换行.匹配逻辑、捕获分组、空值入参、异常入参校验规则是数据库 Oracle 兼容语法落地、开发自测、迁移改造的参考文档。本用例核心基准所有 SQL 预期结果与 Oracle 原版执行结果保持一致用于验证国产数据库 Oracle 兼容层正则引擎正确性。二、正则修饰符匹配模式核心差异点标记含义Oracle 标准规则i大小写不敏感匹配m多行模式^ 匹配每行开头、$匹配每行结尾换行\n 切分行n.默认​不匹配换行符 CHR (10)无 n/m 时.不能跨换行匹配组合 in/im多标记叠加同时开启忽略大小写 多行 / 不跨行规则关键规则默认.不能匹配换行m 改变锚点 ^/$作用域、n 控制.是否吞换行是整套测试核心基准。通用约束负数入参起始位置、匹配次数、分组号Oracle 统一抛异常兼容库需同步抛出报错任意参数传入 NULL 遵循 Oracle 空值返回规则分函数差异化处理正则捕获分组()支持序号取值从 1 开始0 代表完整匹配内容。三、五大正则函数详细说明3.1 REGEXP_LIKE 正则匹配判断作用判断字符串是否匹配正则返回布尔true/false对标 Oracle WHERE 条件判断逻辑。语法REGEXP_LIKE(源字符串,正则表达式[,修饰符])换行测试a||CHR(10)||d 场景无修饰、m.不能跨换行匹配 a.d 不命中n.可匹配换行命中返回 true大小写 iGREEN 中重复元音 ee不带 i 区分大小写不匹配带 i 忽略大小写命中多行 m跨行文本 foo\nbar\nbaz^bar 在 m 模式匹配行首 bar默认不匹配组合标记 in/im同时控制大小写 换行锚点规则。适用场景WHERE 条件模糊筛选、数据规则校验。3.2 REGEXP_COUNT 正则匹配次数统计作用统计源串中正则匹配成功的总次数返回整数参数支持REGEXP_COUNT(源,正则[,起始位置[,修饰符]])起始位置约束起始位 ≤0 非法报错同 Oracle ORA-01428贪婪匹配123123123 匹配(12)3 重叠匹配计数遵循 Oracle 非重叠匹配规则大小写 / 多行继承 REGEXP_LIKE 标记规则空源串、无匹配内容返回 0。适用场景统计字段手机号 / 身份证 / 关键词出现频次。3.3 REGEXP_INSTR 正则匹配位置查找作用返回匹配内容起始下标默认从 1 开始计数Oracle 全参数语法REGEXP_INSTR(src,pattern[,pos[,occurrence[,opt[,flag[,group]]]]])参数释义pos查找起始下标occurrence第 N 次匹配opt0 返回匹配起始位1 返回匹配结束后下标flagi/m/n 修饰符group捕获分组编号0 全匹配。典型用例拆分英文语句单词[^ ] 按空格分词取第 6 个单词下标多级捕获(123)(4(56)(78))通过 group4 取最内层分组 78 位置非法值pos/occurrence/group 传负数直接抛出异常。适用场景截取指定位置关键字、结构化文本字段拆分。3.4 REGEXP_SUBSTR 正则内容截取作用按正则截取匹配字符串参数同 REGEXP_INSTR多分组取值。语法REGEXP_SUBSTR(源,正则[,起始位[,第几次匹配[,修饰符[,分组号]]]])分组规则group0 返回完整匹配≥1 返回对应括号内捕获内容无匹配返回 NULL示例,\s([Zf][^,])i 忽略大小写group1 截取 zipcode town起始位、匹配次数负数入参报错。适用场景从混杂文本提取手机号、邮箱、编号、URL。3.5 REGEXP_REPLACE 正则替换作用使用替换串替换正则匹配内容Oracle 标准全参数REGEXP_REPLACE(src,pattern,repl[,pos[,occ[,flag]]])参数pos 起始位置occ 第 N 个匹配开始替换0 全局全部替换flag 匹配修饰符特殊 NULL 规则Oracle 独有重点兼容入参情况返回结果源串 NULLNULL正则 pattern 为 NULL返回原字符串替换 repl 为 NULL匹配内容被清空删除常用示例连续多个空格( ){2,}替换为单个空格、手机号格式化 512.123.4567→(512) 123-4567起始位、替换次数传负数触发异常不支持 g 全局标记Oracle 无 g靠 occ0 全局替换。适用场景数据清洗、格式标准化、敏感信息脱敏。四、空值与异常入参规范Oracle 对齐重点1、NULL 参数规则REGEXP_LIKE/COUNT/INSTR/SUBSTR任一关键参数 NULL返回 NULLREGEXP_REPLACE 特殊pattern 为 NULL 直接返回原文本区别其余函数。2、非法数值入参pos起始下标、occurrence第 N 次匹配、group分组号传入负数全部抛出运行异常对标 Oracle ORA-01428 错误。3、非法修饰符非 i/m/n 字符作为 flag遵循 Oracle 原生容错逻辑。