我对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} +?
像这样?
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
我保留了原始查询,但稍微改变了模式。
我的模式[^|]+\|[^|]+
包含三个部分:
[^|]+
- 没有管道的字符串\|
- 一根管子[^|]+
- 另一个没有管道的字符串尝试这种模式:(?<=\|{2}).+?(?=\|{2})
。
细节:它使用lookbehind (?<=\|{2})
和lookahead (?=\|{2})
捕获双管\|{2}
之间的所有东西。