如何在Oracle SQL/PLSQL中用REGEXP_SUBSTR提取指定字符间内容
解决Oracle正则提取指定分隔符间内容的问题
你的正则写法存在逻辑错误,导致提取结果不符合预期:
- 原正则中的
[^99|10]是字符类,它的含义是匹配除了9、1、0、|之外的任意单个字符,这和你想匹配99或10作为起始分隔符的需求完全不符。 - 后续的
(.)([^(>)]+)会额外匹配多余的字符,最终导致返回内容包含了起始分隔符之前的部分。
正确的SQL语句
使用Oracle的REGEXP_SUBSTR函数,通过指定分组提取来精准获取99/10和>之间的内容:
SELECT REGEXP_SUBSTR('013654127411422599412405412123AB>Z4204015479', '(99|10)(.*?)>', 1, 1, '', 2) AS result FROM DUAL;
语句说明
(99|10):匹配起始分隔符99或10,作为第1个分组(.*?):匹配两个分隔符之间的任意内容(非贪婪模式,避免匹配到多个>),作为第2个分组>:匹配结束分隔符- 最后一个参数
2:指定提取第2个分组的内容,也就是我们需要的目标字符串
执行上述语句后,会返回预期结果:412405412123AB
内容的提问来源于stack exchange,提问作者user22553365
相关产品推荐
相关产品推荐

