使用正则表达式检索子字符串?

时间:2014-02-13 10:39:07

标签: regex oracle

我的朋友他们就像具有特定格式的ummm文件名应该写成第一年(YY)然后是月(MM)然后是连续数字(SEQ)并存储在数据库中我必须检查所有文件是同年和同月存在......

我正在使用正则表达式来捕捉这些部分以检查这个概念......并感谢您的帮助 我正在使用where子句来过滤记录然后我使用substr来捕捉这些我告诉过你的部分,所以查询会是这样的......

Select substr(column_name1,4,4),substr(column_name1,0,2),substr(column_name1,2,2), 
  into seqvar,yearvar,dayvar 
  from table1 
 where regex_like (FILENAME,'(CDR-)([1-9][0-9]{0,3})(_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR)

这样做的最好的方法和最快的方法吗?

或使用类似于regex的ins子句在哪里cluase更好?

请您对该案件的所有意见

2 个答案:

答案 0 :(得分:0)

如果您只想要提到的部分/组,请使用:

`/\((.*?)\)/`

在你的萤火虫中试试这个

var str = 'CDR-([1-9][0-9]{0,3})_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR';
var res = /\((.*?)\)/.exec(str);
console.log(res[1]);

将输出:[1-9][0-9]{0,3}

如果您想要([1-9][0-9]{0,3})

之类的输出

使用:/(\(.*?\))/

答案 1 :(得分:0)

由于oracle不支持前瞻,可能更容易使用REGEXP_REPLACE

可能看起来像这样:

select regexp_replace(FILENAME, '(CDR-)([1-9][0-9]{0,3})(_[0-9]{2}_[0-9]{2}_[0-9]{2}_[0-9]{4}_UK1\.FCDR)', '\2')
  from ....