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