2015-09-02 51 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