Oracle中使用regexp_substr搭配look behind提取字符串末尾两位字符问题
解决方案
- 方案1:复用你原有正则,利用
regexp_substr的捕获组参数直接取第2组结果
你原来的正则已经把目标内容分到了第2个捕获组,Oracle的regexp_substr支持通过第6个参数指定返回对应捕获组的内容,写法如下:
select regexp_substr('A-XY','([A-]+)?([A-Z]+)', 1, 1, NULL, 2) from dual;
不管输入是A-XY还是无前置的XY格式,都能正确返回末尾的字母部分。
- 方案2:使用更精简的末尾匹配正则
如果你明确要提取末尾2位大写字母,可以直接用末尾锚定符$匹配,写法更简单,不需要处理前置分组:
select regexp_substr('A-XY','[A-Z]{2}$') from dual;
错误原因说明
你之前使用lookbehind语法失败的原因是:Oracle的正则表达式不支持不定长度的正向回溯,你写的(?<=[A-]+)里+代表匹配长度可变,不符合Oracle回溯规则,因此会返回错误结果。
内容的提问来源于stack exchange,提问作者Pato
相关产品推荐
相关产品推荐

