我需要幫助來創建一個正則表達式,以獲取以下目錄的文件的名稱和擴展名。
/home/user/work/file1.dbf
/opt/user/file2.dfb
我試圖創建Oracle12C表達式只輸出「file1.dbf
」和「file2.dbf
」。
我目前正在嘗試做下一個page的正則表達式,並閱讀以下documentation。
在此先感謝,我希望我解釋正確。
我需要幫助來創建一個正則表達式,以獲取以下目錄的文件的名稱和擴展名。
/home/user/work/file1.dbf
/opt/user/file2.dfb
我試圖創建Oracle12C表達式只輸出「file1.dbf
」和「file2.dbf
」。
我目前正在嘗試做下一個page的正則表達式,並閱讀以下documentation。
在此先感謝,我希望我解釋正確。
你不需要一個正則表達式來做到這一點。 substr
和instr
的組合就足夠了。
instr(colname,'/',-1)
獲取字符串中最後一次出現/
。並且該位置之後的子字符串將是根據所示數據的文件名。
篩選器instr(colname,'/') > 0
限制其中沒有/
的行。
select substr(colname,instr(colname,'/',-1)+1) as filename
from tablename
where instr(colname,'/') > 0
一個相同的正則表達式是
select regexp_substr(colname,'(.*/|^)(.+)$',1,1,null,2) as filename
from tablename
(.*/|^)
- 高達字符串或字符串的開頭,在過去/
occurence所有的人物,如果沒有/
字符。
(.+)$
- 最後的所有字符/
如果它存在於字符串中或全字符串中,如果/
不存在。
它們被提取爲2組,我們對第2組感興趣。因此,參數2
在regexp_substr
的末尾。
它工作完美。感謝您解決我的問題並迅速回答。 – Randomuser1204281
@ Randomuser1204281 - 未來,請記住vkp的優秀建議:儘可能使用'substr','instr','like'和其他「標準」字符串函數和運算符,並且只有在無法使用標準時才使用正則表達式功能和操作員,或者在使用它們時變得過於繁瑣和難以管理。您會體會到更快的執行時間! – mathguy
另一種正則表達式的方法是剝奪一切,直至最後/
:
with demo as
(select '/home/user/work/file1.dbf' as path from dual union all
select '/opt/user/file2.dfb' from dual)
select path
, regexp_replace(path,'^..*/') as filename
from demo;
什麼是你的問題?如果您對現有代碼有特定問題,請編輯您的問題,包括代碼並說明您的具體問題。 – Xufox
@Xufox問題是我已經嘗試了許多正則表達式,我無法得到任何滿足我要求的東西。非常感謝您的評論, – Randomuser1204281
您的輸入字符串是否總是代表文件的路徑,或者您可能還有目錄(如果巧妙地完成,對於此應用程序,它們應該在末尾顯示'/'右邊以區分它們) ?你總是可以添加一個'where'子句來首先將它們過濾掉,如果它們可能存在並且你不希望它們包含在輸出中。 – mathguy