2

以下のようなソース文字列のサンプルがあります。これは、値obrがどこにでもあるという点でパイプ区切り形式でした。obrの最初の出現からパイプの 2 番目の値を取得する必要があります。したがって、以下のソース文字列の場合、予想されるのは次のようになります。

ソース文字列:

select 'asd|dfg|obr|1|value1|end' text from dual
union all
select 'a|brx|123|obr|2|value2|end' from dual
union all
select 'hfv|obr|3|value3|345|pre|end' from dual

期待される出力:

value1
value2
value3

以下の正規表現を oracle sql で試しましたが、うまく動作しません。

with t as (
            select 'asd|dfg|obr|1|value1|end' text from dual
            union all
            select 'a|brx|123|obr|2|value2|end' from dual
            union all
            select 'hfv|obr|3|value3|345|pre|end' from dual
            )
            select text,to_char(regexp_replace(text,'*obr\|([^|]*\|)([^|]*).*$', '\2')) output from t;

文字列が OBR で始まる場合は正常に動作しますが、上記のサンプルのように OBR が途中にある場合は正常に動作しません。

どんな助けでも大歓迎です。

4

2 に答える 2

3

Oracle が正規表現をどのように処理するかはわかりませんが、通常、アスタリスクで始まる場合は、0 個以上の null 文字を探していることを意味します。

試しました'^.*obr\|([^|]*\|)([^|]*).*$'か?

于 2015-11-18T17:34:43.363 に答える