当前位置: 首页 > news >正文

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 控制.是否吞换行,是整套测试核心基准。

通用约束

  1. 负数入参(起始位置、匹配次数、分组号)Oracle 统一抛异常,兼容库需同步抛出报错;
  2. 任意参数传入 NULL 遵循 Oracle 空值返回规则,分函数差异化处理;
  3. 正则捕获分组()支持序号取值,从 1 开始,0 代表完整匹配内容。

三、五大正则函数详细说明

3.1 REGEXP_LIKE 正则匹配判断

作用:判断字符串是否匹配正则,返回布尔(true/false),对标 Oracle WHERE 条件判断逻辑。

语法:REGEXP_LIKE(源字符串,正则表达式[,修饰符])

换行测试:a||CHR(10)||d 场景:
无修饰、m:.不能跨换行,匹配 a.d 不命中;
n:.可匹配换行,命中返回 true;
大小写 i:GREEN 中重复元音 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 次匹配;
opt:0 返回匹配起始位,1 返回匹配结束后下标;
flag:i/m/n 修饰符;group:捕获分组编号,0 = 全匹配。
典型用例:
拆分英文语句单词,[^ ]+ 按空格分词,取第 6 个单词下标;
多级捕获(123)(4(56)(78)),通过 group=4 取最内层分组 78 位置;
非法值:pos/occurrence/group 传负数直接抛出异常。

适用场景:截取指定位置关键字、结构化文本字段拆分。

3.4 REGEXP_SUBSTR 正则内容截取

作用:按正则截取匹配字符串,参数同 REGEXP_INSTR,多分组取值。
语法:REGEXP_SUBSTR(源,正则[,起始位[,第几次匹配[,修饰符[,分组号]]]])
分组规则:group=0 返回完整匹配,≥1 返回对应括号内捕获内容;无匹配返回 NULL;
示例:,\s+([Zf][^,]+),i 忽略大小写,group=1 截取 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,靠 occ=0 全局替换)。
适用场景:数据清洗、格式标准化、敏感信息脱敏。

四、空值与异常入参规范(Oracle 对齐重点)

1、NULL 参数规则

REGEXP_LIKE/COUNT/INSTR/SUBSTR:任一关键参数 NULL,返回 NULL;

REGEXP_REPLACE 特殊:pattern 为 NULL 直接返回原文本,区别其余函数。

2、非法数值入参

pos(起始下标)、occurrence(第 N 次匹配)、group(分组号)传入负数,全部抛出运行异常,对标 Oracle ORA-01428 错误。

3、非法修饰符:非 i/m/n 字符作为 flag,遵循 Oracle 原生容错逻辑。

http://www.zskr.cn/news/1494232.html

相关文章:

  • 支付宝小程序星巴克点单模板源码(含完整页面截图与可运行项目结构)
  • 上海防水堵漏全攻略:从发现渗漏到彻底修复只需这5步 - 资讯纵览
  • 雷达发射机:功率、频率与相参性的三维博弈
  • 如何5分钟完成Minecraft 1.21 MASA全家桶模组中文汉化:终极免费指南
  • Bodymovin扩展面板:5分钟快速掌握After Effects动画导出终极指南
  • 学而思编程周赛入门初赛组 | 2026年春第11周
  • 告别命令行恐惧:用msys2的pacman包管理器搞定Windows下的软件安装与更新
  • AI安全门禁CGL原理与工程适配指南
  • 告别手动复制粘贴!用UiPath Studio 2024.10读取Excel数据,5分钟搞定自动化第一步
  • 无需代码操作,OpenClaw Windows 可视化部署与模型使用指南
  • 抖音无水印批量下载器:3步掌握高效自动化下载技巧
  • AI Pin无屏幕交互:用光子投射与触觉反馈重塑瞬时信息获取
  • GAN训练调参秘籍:如何用F-散度中的海林格距离和卡方距离替代KL散度?
  • pgvector 核心原理:向量索引类型与距离度量深度解析
  • 如何用Python工具完整备份你的QQ空间历史说说:GetQzonehistory终极指南
  • wxapkg-convertor终极指南:5分钟掌握微信小程序反编译专业技巧
  • 如何完全免费永久保存微信聊天记录:WeChatMsg终极指南
  • GBase 8a之统信操作系统 SSH 远程执行命令异常处理:符号冗余与文件存在性误判解决方案
  • 3-8译码器在FPGA板卡上的实战:驱动LED流水灯与按键扫描(Verilog实现)
  • 从后端到高薪AI应用:3-6个月实战转型路线(小白收藏版)
  • jQuery.Marquee:现代化跑马灯效果的技术实现与实战应用
  • 网站突然打不开,怎么快速判断是不是遭遇DDoS攻击?
  • 运维技术支援
  • 泉州公司注销处理机构排行 合规高效服务盘点 - 起跑123
  • 从Word2Vec到BERT:为什么PMI(点间互信息)仍是理解词嵌入的底层密码?
  • Adobe-GenP 3.0:免费解锁Adobe全家桶的终极解决方案 [特殊字符]
  • 别让基线漂移毁了你的信号!手把手教你用Matlab的detrend函数搞定心电/脑电数据预处理
  • Windows 10终极性能优化指南:如何通过开源工具释放系统50%以上资源
  • 终极方案:iOS无越狱定制工具Misaka深度解析与实战指南
  • 告别XGBoost?用TabNet处理表格数据实战:从信用卡欺诈检测到模型调优