这里有很多例子,例如使用正则表达式如何检索括号之间的文本,但我还没有找到一个可以用多级括号来做到这一点的例子。
例如,我有文字:
{AB}{C}{DEF{XX}}
我想得到如下结果:
AB
C
DEF{XX}
XX
或者第二个选项,这对我来说也很好,不返回包含其他括号的文本,即:
AB
C
XX
这里是一个使用正则表达式的标准查询,适用于单级括号:
SELECT REGEXP_SUBSTR('{AB}{C}{DEF}', '{(.*?)}', 1, level, NULL, 1) AS str
FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT('{AB}{C}{DEF}', '{(.*?)}');
结果:
AB
C
DEF
此正则表达式不适用于文本 {AB}{C}{DEF{XX}},其结果将是:
AB
C
DEF{XX
此示例仅返回最里面的花括号组的内容。允许除&[{}]+
之外的任意数量的任何字符。感谢@MT0 对模式的更正。(删除了反斜杠,因为我们不需要在类中转义花括号。){
}
SELECT REGEXP_SUBSTR('{AB}{C}{DEF}{HI{JKL}}', '{([^{}]+)}', 1, level, NULL, 1) AS str FROM dual CONNECT BY LEVEL <= REGEXP_COUNT('{AB}{C}{DEF}{HI{JKL}}', '{(.*?)}');
| 字符串 | | :-- | | AB | | C | | 防御工事 | | JKL |
db<>在这里摆弄
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句