将正则表达式与oracle一起使用

时间:2018-08-09 12:49:47

标签: regex oracle

我对使用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`

我不知道如何只过滤介于双管道和可能包含某些单管道之间的字符串。

欢迎任何帮助。

更新

我已经按照以下模式制作了:(\ w)+ \ ||(\ w)+(\ |){2,2} +?

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

详细信息:它使用向后(?<=\|{2})和向后(?=\|{2})后退来捕获双管道\|{2}之间的所有内容。

Demo