使用正则表达式与oracle

问题描述 投票:1回答:2

我对oracle的正则表达式相对较新,我想知道如何在两个管道之间拆分文本。这是输入字符串:1 || 01 | SOME_TEXT || 02 | OTHER_TEXT ||

我想要的是检索01 | SOME_TEXT和02 | OTHER_TEXT

这是我尝试过的:

`Select regexp_substr('1||01|SOME_TEXT||02|OTHER_TEXT||', '[^\|\|]', 1, Level) From Dual
Connect By regexp_substr('1||01|SOME_TEXT||02|OTHER_TEXT||', '[^\|\|]', 1, Level) Is Not Null`

我不知道如何只过滤双管和可能包含一些管道的字符串。

欢迎任何帮助。

UPDATE

我用以下模式制作了它:(\ w)+ \ |(\ w)+(\ |){2,2} +?

regex oracle
2个回答
2
投票

像这样?

Select regexp_substr('1||01|SOME_TEXT||02|OTHER_TEXT||', '[^|]+\|[^|]+', 1, Level) From Dual
Connect By regexp_substr('1||01|SOME_TEXT||02|OTHER_TEXT||', '[^|]+\|[^|]+', 1, Level) Is Not Null

我保留了原始查询,但稍微改变了模式。

我的模式[^|]+\|[^|]+包含三个部分:

  • [^|]+ - 没有管道的字符串
  • \| - 一根管子
  • [^|]+ - 另一个没有管道的字符串

1
投票

尝试这种模式:(?<=\|{2}).+?(?=\|{2})

细节:它使用lookbehind (?<=\|{2})和lookahead (?=\|{2})捕获双管\|{2}之间的所有东西。

Demo

© www.soinside.com 2019 - 2024. All rights reserved.