试图创建正则表达式[ORACLE]

时间:2017-01-30 22:34:52

标签: sql regex oracle plsql oracle12c

好,

我需要帮助来创建一个正则表达式,只需获取以下目录的文件名和扩展名。

/home/user/work/file1.dbf
/opt/user/file2.dfb

我正在尝试在Oracle12C中创建一个表达式,只输出“file1.dbf”和“file2.dbf”。

我目前正在尝试在下一个page上执行正则表达式并阅读以下documentation

提前致谢,我希望我已正确解释。

2 个答案:

答案 0 :(得分:1)

您不需要正则表达式来执行此操作。 substrinstr的组合就足够了。

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
  • (.*/|^) - 如果没有/个字符,则字符串中最后/出现的所有字符或字符串的开头。

  • (.+)$ - 如果/存在于字符串中,则为最后一个/之后的所有字符;如果2不存在,则为完整字符串。

他们被提取为2组,我们对第2组感兴趣。因此regexp_substr末尾的论证MATCH (post:Post) WITH post ORDER BY post.createdAt DESC SKIP {skip} LIMIT {limit} MATCH (user:User)-[:CREATED]->(post) RETURN post, user.username AS `createdBy`, size((post)<-[:LIKES]-(:User)) AS `likes`

Read about the arguments to REGEXP_SUBSTR here

答案 1 :(得分:0)

另一种正则表达式方法是将所有内容剥离到最后/

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;