我有像a123bcd-e2343fg-hij-dfgh
这样的String
并且我想在Oracle中使用Regular_expression来输出e2343fg-hij-dfgh
。
select regexp_substr('abcd-efg-hij','-[^-]+'1) from dual;
答案 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
替换。
答案 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()找不到匹配项,则返回原始字符串。