Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正在尝试创建正则表达式[ORACLE]_Sql_Regex_Oracle_Plsql_Oracle12c - Fatal编程技术网

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
和其他“标准”字符串函数和运算符,只有在无法使用标准函数和运算符,或者使用它们变得过于繁琐和难以管理时,才使用正则表达式。您将欣赏更快的执行时间!