好,
我需要帮助来创建一个正则表达式,只需获取以下目录的文件名和扩展名。
/home/user/work/file1.dbf
/opt/user/file2.dfb
我正在尝试在Oracle12C中创建一个表达式,只输出“file1.dbf
”和“file2.dbf
”。
我目前正在尝试在下一个page上执行正则表达式并阅读以下documentation。
提前致谢,我希望我已正确解释。
答案 0 :(得分:1)
您不需要正则表达式来执行此操作。 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
(.*/|^)
- 如果没有/
个字符,则字符串中最后/
出现的所有字符或字符串的开头。
(.+)$
- 如果/
存在于字符串中,则为最后一个/
之后的所有字符;如果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`
。
答案 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;