2

PL/SQL を使用して、セミコロンで区切られた文字列をその部分に分割したいと考えています。文字列に丸括弧がない限り、REGEXP_SUBSTR で問題なく動作します。

例:

select REGEXP_SUBSTR('A;B;C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B;C','[^(";")]+',1,3)
from dual;

期待通りの結果: ABC

A;B(1);C の結果は AB(1) C になるはずですが、得られるものは次のとおりです: AB 1

select REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,1),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,2),
REGEXP_SUBSTR('A;B(1);C','[^(";")]+',1,3)
from dual;

これは「(」が区切り文字として検出されることを意味しますが、私はこの動作を理解していません。誰かが私を啓発してもらえますか?

4

2 に答える 2

5

[]多言語正規表現構文であり、「リストで表される式のいずれかに一致する必要がある一致リストを指定するためのブラケット式。不一致リスト式はサーカムフレックス (^) で始まり、次を除く任意の文字に一致するリストを指定します。リストに示されている式。」

例えば

select REGEXP_SUBSTR('"A";"B(1)";"C"','[^";"]+',1,1)
from dual;

ORをセパレータと見なすA B(1) C場所を返します[^";"]+";

同様に、あなたの例で は、 OR OR ORを期待に反するセパレータと[^(";")]+見なします。";()

したがって、期待される出力については、試すことができます

select REGEXP_SUBSTR('A;B(1);C','[^;]+',1,1),
REGEXP_SUBSTR('A;B(1);C','[^;]+',1,2),
REGEXP_SUBSTR('A;B(1);C','[^;]+',1,3)
from dual;
于 2016-07-05T15:02:54.087 に答える