如何获取与Oracle SQL中的正则表达式匹配的字符串的一部分

And*_*rey 10 regex sql oracle

假设我有以下字符串:'product = 1627; color = 45; size = 7'在表的某些字段中.我想查询颜色并得到45.

有了这个查询:

SELECT REGEXP_SUBSTR('product=1627;color=45;size=7', 'color\=([^;]+);?') "colorID" 
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

我明白了:

colorID  
---------
color=45;
1 row selected
Run Code Online (Sandbox Code Playgroud)

.

是否有可能获得匹配字符串的一部分 - 这个例子是45?

APC*_*APC 6

一种方法是使用REGEXP_REPLACE.您需要将整个字符串定义为正则表达式模式,然后只使用您想要的元素作为replace string.在此示例中,ColorID是整个字符串中的第三个模式

SELECT REGEXP_REPLACE('product=1627;color=45;size=7'
                         , '(.*)(color\=)([^;]+);?(.*)'
                         , '\3') "colorID"  
FROM DUAL;  
Run Code Online (Sandbox Code Playgroud)

可能会有较少的笨重的正则表达式解决方案,但这个肯定有效. 这是一个SQL小提琴.