2015-09-02 31 views
0

没有落后表达看在Oracle Doc的例子,所以我尝试使用Java语法, 这是我的查询应该是显示TOP甲骨文向后看正

select regexp_substr('TIPTOP4152','(?<=TOP)\d+') sub from dual 

但没有什么后得到任何数字!

回答

0

要做到这一点很容易地对参数的缘故,REGEXP_SUBSTR工程太:

SQL> select regexp_substr('TIPTOP4152', 'TOP(\d+)', 1, 1, NULL, 1) nbr 
    from dual; 

NBR 
---- 
4152 

SQL> 
+0

最终参数'1',获取第一个捕获组。 [Oracle 11g docs on REGEXP_INSTR](https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions136.htm#SQLRF06300):_如果subexpr为零,则整个子字符串的位置与模式被返回。如果subexpr大于零,则返回匹配子字符串中与子表达式编号subexpr相对应的子字符串片段的位置。如果pattern至少没有subexpr子表达式,则函数返回零。空的子表达式值返回NULL。 subexpr的默认值为零._ –

+0

即正向lookbehind在Oracle中似乎不起作用,请在此解决方案中使用“技巧”来捕获组。 –

3

我不确定Oracle是否支持lookbehind。相反,你应该能够regexp_replace

REGEXP_REPLACE('TIPTOP4152', '.*TOP(\d+)', '\1') 
+0

好的,但如果存在,它将数字后给予号和任何东西,尝试'TIPTOP4152.csv' =>'4152.csv' – 54l3d