2016-12-29 9 views
0

「スペース」を「&」で置き換える場合は、「| 'in regexp_replaceOracle Regexp_replace

例:' create |アカウントを削除する ' - >' create |として出力を期待する&アカウント 'を削除してください。

私は、SQL

select regexp_replace('create | delete account','\s [^\s\|\s]',' & ') from dual 

としよう。しかし、私はここで何か間違ったことをやってM M。誰でも助けてくれますか?

+0

スペースのシーケンスがある場合は、すべてのスペースを '&'で置き換える必要がありますか?また、開始文字列に '&'という文字がある可能性はありますか? – Aleksej

答えて

3

私は、これはあなたが欲しいものだと思う:

select regexp_replace('create | delete account', '([^\|]) ([^\|])', '\1 & \2') 
from dual 

ロジックは、2つの非パイプ文字の間にスペースが入るたびに置き換えます。私はかっこでこれらの文字を取り込み、\1\2で置き換えて使用します。

+1

3つ以上のスペースの場合は、 '([^ \ |])\ s +([^ \ |])'を使用します。 +1。 – GurV

+0

@GurwinderSinghコメントとupvoteのおかげで:-) –

+0

@ティムBiegeleisen - ありがとう..それは解決..私はあなたが要件を見た方法が好きだった( ')2つのパイプ以外の文字の間のスペースを置き換える' –

0

あなたは、文字列' & 'で一つ一つのスペースを交換する必要がある、と何'&'あなたの開始文字列にありません場合は、正規表現を回避することができる:

select replace (replace('create | delete account', ' ', ' & '), ' & | & ', ' | ') from dual 
関連する問題