私はちょうどregexp_replace
PostgreSQLの機能が不思議な振る舞いを見つけました。それはバグのように見えますが、私はいつも自分自身をまず疑う。私はregexp_replaceでの見かけ上不正確な正規表現の評価
SELECT regexp_replace(E'1%2_3', '([_%])', E'\\ \\1', 'g')
を実行すると、それは正しくバックスラッシュ+スペースに下線またはパーセントのいずれかを接頭辞と「1\ %2\ _3
」を生成します。私はスペース(それはスペースである必要はありません、任意の文字することができます)
SELECT regexp_replace(E'1%2_3', '([_%])', E'\\\\1', 'g')
を削除する場合しかし、それは置換でキャプチャ括弧で囲まれた式を使用して停止し、代わりに「1\%2\_3
」の「1\12\13
」を生成します。誰かが私に何が間違っているのかを教えてもらえれば分かります。文字列の特定の文字の前にバックスラッシュを追加するだけです。
UPDATE:私は私の元の例は、まだ少し非論理的かつ一貫性のないと思われる
SELECT regexp_replace(E'1%2_3', '([_%])', E'\\\\\\1', 'g')
を実行することにより、目的の動作を実現することができました。同じE'...'
シンタックス4のバックスラッシュを使用すると、異なる結果が生じる可能性があります。
ありがとうBarmar私はいくつかの実験の後にこれを発見しました –