Sql 正在尝试创建正则表达式[ORACLE]
好, 我需要帮助来创建一个正则表达式,以便只获取以下目录的文件名和扩展名Sql 正在尝试创建正则表达式[ORACLE],sql,regex,oracle,plsql,oracle12c,Sql,Regex,Oracle,Plsql,Oracle12c,好, 我需要帮助来创建一个正则表达式,以便只获取以下目录的文件名和扩展名 /home/user/work/file1.dbf /opt/user/file2.dfb 我试图在Oracle12C中创建一个表达式,只输出“file1.dbf”和“file2.dbf” 我目前正在尝试在下一篇文章中使用正则表达式,并阅读以下内容 提前谢谢,我希望我的解释是正确的。您不需要正则表达式来执行此操作。substr和instr的组合就足够了 instr(colname,“/”,-1)获取字符串中最后出现的/。
/home/user/work/file1.dbf
/opt/user/file2.dfb
我试图在Oracle12C中创建一个表达式,只输出“file1.dbf
”和“file2.dbf
”
我目前正在尝试在下一篇文章中使用正则表达式,并阅读以下内容
提前谢谢,我希望我的解释是正确的。您不需要正则表达式来执行此操作。
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
-直到最后一个(.*/|^)
为止的所有字符都出现在字符串中,如果没有/
字符,则出现在字符串的开头/
-如果最后一个(.+)$
存在于字符串中,则最后一个/
后面的所有字符;如果/
不存在,则完整字符串后面的所有字符/
regexp\u substr
末尾的参数2
.另一种正则表达式方法是将所有内容剥离到最后一个
/
:
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问题是我尝试了许多正则表达式,但我无法得到满足我要求的任何正则表达式。非常感谢您的评论,您的输入字符串是否始终表示文件的路径,或者您是否在其中也有目录(如果操作得当,对于此应用程序,它们应该在末尾显示一个
/
,以区分它们)?如果它们可能存在并且不希望包含在输出中,则始终可以添加一个where
子句来首先过滤掉它们。它非常有效。感谢您这么快地解决了我的问题并回答了我的问题。@Randomuser1204281-以后,请记住vkp的绝妙建议:尽可能使用substr
、instr
、like
和其他“标准”字符串函数和运算符,只有在无法使用标准函数和运算符,或者使用它们变得过于繁琐和难以管理时,才使用正则表达式。您将欣赏更快的执行时间!