我想使用分隔符搜索字符串,分隔符是2个或更多字符的组合。
请找到我在下面尝试的查询:
select REGEXP_SUBSTR('123$@45$6$@789','[^$@]+',1,2) from dual
必填项:
45$6
输出:
45
我理解使用用户定义的函数[使用INSTR + SUBSTR]很容易,但我正在寻找答案&用REGEXP_SUBSTR解释。
提前致谢。
答案 0 :(得分:3)
不是那样的......而是:
select REGEXP_SUBSTR('123$@45$6$@789','(.*?)(\$@|$)', 1, 2, null, 1) from dual;
注意代码中的\$
; $
表示字符串的结尾,因此如果您的意思是文字美元符号,则必须将其转义。此解决方案使用“捕获组”概念 - 如果您不熟悉,请参阅REGEXP_SUBSTR()的Oracle文档。第一个捕获组是(.*?)
- 在分隔符之前的任何内容;它在REGEXP_SUBSTR的第六个(最后一个)参数中被引用。
另请注意,在第一个捕获组之后,我检查字符串结尾的双字符分隔符或 ...由$
标记。括号中的两个选项以|
(另一个“特殊字符”)分隔,是“要么......或......”的正则表达式语法。