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

Trying to create a regular expression [ORACLE]

很好,

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

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

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

我目前正在尝试在下一个 page and reading the following documentation 上执行正则表达式。

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

您不需要正则表达式来执行此操作。 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 组,我们对第二组感兴趣。因此 regexp_substr.

末尾的参数 2

Read about the arguments to REGEXP_SUBSTR here.

另一种正则表达式方法是去除所有内容直到最后 /:

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;