REGEXP SUBSTR其中分隔符是2个或更多字符的组合

时间:2017-10-03 14:02:40

标签: oracle regexp-substr

我想使用分隔符搜索字符串,分隔符是2个或更多字符的组合。

请找到我在下面尝试的查询:

select REGEXP_SUBSTR('123$@45$6$@789','[^$@]+',1,2) from dual

必填项:

45$6

输出:

45

我理解使用用户定义的函数[使用INSTR + SUBSTR]很容易,但我正在寻找答案&用REGEXP_SUBSTR解释。

提前致谢。

1 个答案:

答案 0 :(得分:3)

不是那样的......而是:

select REGEXP_SUBSTR('123$@45$6$@789','(.*?)(\$@|$)', 1, 2, null, 1) from dual;

注意代码中的\$; $表示字符串的结尾,因此如果您的意思是文字美元符号,则必须将其转义。此解决方案使用“捕获组”概念 - 如果您不熟悉,请参阅REGEXP_SUBSTR()的Oracle文档。第一个捕获组是(.*?) - 在分隔符之前的任何内容;它在REGEXP_SUBSTR的第六个(最后一个)参数中被引用。

另请注意,在第一个捕获组之后,我检查字符串结尾的双字符分隔符 ...由$标记。括号中的两个选项以|(另一个“特殊字符”)分隔,是“要么......或......”的正则表达式语法。