沒有落後表達看在Oracle Doc的例子,所以我嘗試使用Java語法, 這是我的查詢應該是顯示TOP
甲骨文向後看正
select regexp_substr('TIPTOP4152','(?<=TOP)\d+') sub from dual
但沒有什麼後得到任何數字!
沒有落後表達看在Oracle Doc的例子,所以我嘗試使用Java語法, 這是我的查詢應該是顯示TOP
甲骨文向後看正
select regexp_substr('TIPTOP4152','(?<=TOP)\d+') sub from dual
但沒有什麼後得到任何數字!
要做到這一點很容易地對參數的緣故,REGEXP_SUBSTR工程太:
SQL> select regexp_substr('TIPTOP4152', 'TOP(\d+)', 1, 1, NULL, 1) nbr
from dual;
NBR
----
4152
SQL>
我不確定Oracle是否支持lookbehind。相反,你應該能夠regexp_replace
REGEXP_REPLACE('TIPTOP4152', '.*TOP(\d+)', '\1')
好的,但如果存在,它將數字後給予號和任何東西,嘗試'TIPTOP4152.csv' =>'4152.csv' – 54l3d
最終參數'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的默認值爲零._ –
即正向lookbehind在Oracle中似乎不起作用,請在此解決方案中使用「技巧」來捕獲組。 –