1

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

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

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

所需输出:

45$6

输出:

45

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

提前致谢。

4

1 回答 1

4

不是那样...而是:

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

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

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

于 2017-10-03T14:07:48.450 回答