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...".
的正则表达式语法
我想使用由 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...".