Oracle Regexp_substr字符串

时间:2018-07-24 12:16:58

标签: sql regex oracle oracle11g regexp-substr

我有像a123bcd-e2343fg-hij-dfgh这样的String 并且我想在Oracle中使用Regular_expression来输出e2343fg-hij-dfgh

select regexp_substr('abcd-efg-hij','-[^-]+'1) from dual;

4 个答案:

答案 0 :(得分:0)

select substr('abcd-efg-hij',
               regexp_instr('abcd-efg-hij','-[^-]+')+1,length('abcd-efg-hij')) 
  from dual;

尝试

答案 1 :(得分:0)

您可以使用regexp_substr模式应用[^-]+[-^],然后将ltrim应用为:

select ltrim('a123bcd-e2343fg-hij-dfgh',
         regexp_substr('a123bcd-e2343fg-hij-dfgh','[^-]+[-^]')) as output_string        
  from dual;

或者最好使用绑定变量来调用:

select ltrim('&str', regexp_substr('&str','[^-]+[-^]')) as output_string
  from dual;

在提示后,&str可能被a123bcd-e2343fg-hij-dfgh替换。

Rextester Demo

答案 2 :(得分:0)

为什么用正则表达式,当琐碎的angular.forEach($scope.events, function (event) { if ($scope.eventDays.length == 0) { $scope.eventDays.push({ 'groupDate': event.startDate, 'events': [event] }); } else { if (event.startDate == $scope.eventDays[eventIndex].groupDate) { $scope.eventDays[eventIndex].events.push(event) } else if (event.startDate !== $scope.eventDays[eventIndex].groupDate) { $scope.eventDays.push({ 'groupDate': event.startDate, 'events': [event] }); eventIndex++; } } }); 可以很好且快速地完成工作时?没错,它看起来会更“聪明”,但我看不到其他好处。

SUBSTR + INSTR

答案 3 :(得分:0)

为了争辩,regexp_replace也可以工作。此正则表达式匹配直到第一个破折号(包括第一个破折号)的所有内容,并记住它返回的其余部分。

with tbl(str) as (
  select 'a123bcd-e2343fg-hij-dfgh' from dual
)
select regexp_replace(str, '^.*?-(.*)', '\1')
from tbl;

请记住,如果regexp_substr()找不到匹配项,则返回NULL,但是如果regexp_replace()找不到匹配项,则返回原始字符串。