2016-12-28 9 views
0

イムを働いていない置き換えますPostgresは正規表現このクエリの正規表現を作成しようとして

SELECT gruppo 
FROM righe_conto_ready 
WHERE regexp_replace(gruppo,'(\[{1})|(\].*?\[)|(\].*$)','','g') = '[U6][U53]' 
LIMIT 10 

これは「グルッポ」列の例です:

[U6] CAFFETTERIA [U43] THE E TISANE 

現在、テストのために、このクエリを使用してイム:

SELECT regexp_replace(gruppo,'(\[{1})|(\].*?\[)|(\].*$)','','g') FROM .... 

とそれだけでU6

0123を返します。

大括弧の外側のすべてを削除するように正規表現を変更するにはどうすればよいですか?

+0

? – revo

+1

\ [| \] [^] [] * \ [| \] [^] [] * $ ''正規表現を試してください。 –

答えて

1

あなたははるかに簡単な正規表現でregexp_matches()を使用することができます。

with righe_conto_ready(gruppo) as (
    select '[U6] CAFFETTERIA [U43] THE E TISANE'::text 
) 

select gruppo 
from righe_conto_ready, 
lateral regexp_matches(gruppo, '\[.+?\]', 'g') matches 
group by 1 
having string_agg(matches[1], '') = '[U6][U43]' 

       gruppo     
----------------------------------------- 
[U6] CAFFETTERIA [U43] THE E TISANE 
(1 row) 

あなたには、いくつかのパターンの複数の一致を探している場合は、regexp_matches()regexp_replace()より自然なようです。

また、括弧内の最初の2つのサブストリング(gフラグなしで関数が1行よりも多くをもたらしていない)を検索することができます。外部のカッコは何

select gruppo 
from righe_conto_ready, 
lateral regexp_matches(gruppo, '(\[.+?\]).*(\[.+?\])') matches 
where concat(matches[1], matches[2]) = '[U6][U43]' 
+0

これは私を助けました...ありがとう! – Vanojx1

関連する問題