2

postgresql で regexp_match 文字列関数を希望どおりに動作させる方法を理解するのに苦労しています。文字列があり、複数のスペースのインスタンスを 1 つのスペースだけに置き換えたいと考えています。たとえば

'mitt     romney'

になる

'mitt romney'

次のコードが機能するはずです。

SELECT regexp_replace('This      is a    test', '[ ]+', ' ');

期待される結果は

'This is a test'` 

しかし、代わりに私は戻ってきます

'This is a     test'`.  

置換は最初の一致のみを置換するかのようです。誰でもこれを解決する方法を知っていますか?

ありがとう

4

2 に答える 2

8

奇妙だとは思いませんが、文書化されているように見えます: http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

flags パラメーターは、関数の動作を変更する 0 個以上の 1 文字のフラグを含むオプションのテキスト文字列です。フラグ i は、大文字と小文字を区別しない一致を指定しますが、フラグ g は、最初の部分文字列だけでなく、一致する各部分文字列の置換を指定します

強調、私自身。

于 2012-11-07T04:48:40.353 に答える
5

regexp_replace 関数には 4 番目のオプションのパラメーターがあり、指定すると目的の動作が得られます。

私が行った場合

regexp_replace('This      is    a        test`, '[ ]+', ' ', 'g')

望ましい結果が得られます。

于 2012-11-07T04:51:26.827 に答える