我对使用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} +?
答案 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)