REGEXP SUBSTR 其中定界符是 2 个或更多字符的组合

REGEXP SUBSTR where delimiter is a combination of 2 or more characters

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

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

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

要求输出:

45

输出:

45

我知道使用用户定义的函数 [with INSTR+SUBSTR] 很容易实现,但是我正在 REGEXP_SUBSTR.

寻找答案和解释

提前致谢。

不是这样的……而是:

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

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

的第六个(最后一个)参数中被引用

另请注意,在第一个捕获组之后,我检查了两个字符的定界符 字符串的结尾...由 $ 标记.括号中的两个选项由 | 分隔(另一个 "special character")是 "either... or...".

的正则表达式语法