Oracle正则表达式:移除以.pas/.poc结尾的字符串及前置空格
Oracle正则移除指定后缀字符串的全局匹配实现
在Oracle环境中,要全局移除所有以.pas或.poc结尾的字符串及其前置空格,可通过REGEXP_REPLACE函数配合精准正则表达式,并开启全局替换模式来实现。
解决代码
SELECT REGEXP_REPLACE( 'A.H.4.1.2.0000.pas A.H.4.1.2.0000.poc A.H.410000.poc A.H.420000.poc A.H.4.1.2.0000.Total A.H.4', '(^|\s)\S+\.(pas|poc)', '', 1, 0 ) AS cleaned_string FROM DUAL;
关键说明
- 正则表达式解析
(^|\s):匹配字符串开头或单个空格,确保选中完整的目标项(包含分隔用的前置空格)\S+:匹配一个或多个非空格字符,精准定位后缀前的文件名部分\.(pas|poc):匹配.pas或.poc后缀,覆盖两种目标格式
- 全局替换设置
REGEXP_REPLACE的第五个参数设为0,表示替换所有匹配到的实例(而非仅第一个)
- 原正则的问题
- 原正则
($|\s)(.*?)\.poc|(.*?)\.pas存在逻辑优先级问题,且未启用全局替换,导致仅匹配第一个实例;同时.*?非贪婪匹配可能捕获不必要内容,不如\S+精准。
- 原正则
运行上述SQL后,将得到预期结果:
A.H.4.1.2.0000.Total A.H.4
内容的提问来源于stack exchange,提问作者user2337871
相关产品推荐
相关产品推荐

