2017-04-05 29 views
0

私は赤方偏移に取り組んでいます&最初の出現の括弧内のメッセージだけを削除するクエリを書きたいと思っています。そこに赤方偏移で最初に出現する正規表現を見つける正規表現

入力: -

FR_3000 Error opening file [File_Location]. Operating system error message [The system cannot find the path specified.]. 

出力: -

FR_3000 Error opening file []. Operating system error message [The system cannot find the path specified.]. 

私は、クエリの下にしようとしたが、何

select regexp_replace(description,'\[(.*?)\]','') from emp; 
+0

どのように問題を解決できないか教えてください。それは間違った正規表現、または間違ったテーブルまたは列名の名前かもしれません –

答えて

0

わからない...この問題を解決することができませんでしたあなたの問題はです。私は特にRedshiftでこれをテストする環境がありません。私はあなたのタグに基づいて、その交換はあまりにも貪欲なので、結果はFR_3000 Error opening file [].になると思いますか?

一つの方法として赤方偏移に応じた構文を微調整してください

\1[]\2 

説明

^     Start of line 
( )    group 1 
    .*?    any number of character, reluctant match 
        (match at least as possible) 
     \[   follow by open square bracket 
     .*?   any number of char, reluctant match 
      \]  follow by closing square bracket 
      (.*) group 2, of any number of character 
       $ till the end 

^(.*?)\[.*?\](.*)$ 

を交換することです。赤方偏移も、消極的数量詞をサポートするようなものに正規表現を変更しない場合は

https://regex101.com/r/IDEvK3/1

1

^([^\[]*)\[[^\]]*\](.*)$ 

テストの正規表現は、赤方偏移定期急行機能は、グループのいずれかの概念を持っていませんしたがって、ソリューションは純粋な正規表現の純度を持たないでしょう。

限り、あなたは「]」の最初のインスタンスは常にの最初のインスタンスの後に来ることを知っているように「[」は、使用することができます:

select left(description, charindex('[', description)) || substring(description, charindex(']', description)) from emp; 

それはあなたが迷走を持っている可能性がありますが「]」あなたの文字列の先頭にあなたはわずかに少ない効率的に使用することができます。

select left(description, charindex('[', description)) || substring(description, REGEXP_INSTR(description, '\]', charindex('[', description))) from emp; 

我々は最初に右括弧の後の最初の左の位置charindex('[', description)であるブラケット、およびすべての前にすべてのものを取って、これらの文でやっています、位置はですを開き、演算子を||と連結します。

+0

ありがとうジェイソン!それは助けになった –