2016-07-29 41 views
2

私はPostgresの機能に次の行を使用しています:Postgresの無効な正規表現:無効な文字の範囲

regexp_replace(input, '[^a-z0-9\-_]+', sep, 'gi');

しかし、私はそれを使用しようとすると、私はERROR: invalid regular expression: invalid character range取得しています。正規表現はRubyで正常に動作しますが、ポストグルとは異なる理由がありますか?

+0

私はあなたがいたかどうかわかりませんが、ハイフンを文字クラスの最後に置くか、2度エスケープしようとします。 –

+1

エラーなしで実行します。コードの残りの部分を提供することがありますか? – Nicarus

+0

この投稿は役に立ちます:http://stackoverflow.com/questions/12069639/postgres-regex-issue –

答えて

4

正規表現パーサの中には、ある範囲の後にダッシュ( - )を付けるものもあれば、そうでないものもあります。私はpostgres regexpパーサーが後のクラスにあると思われます。正規表現にダッシュを付ける標準的な方法は、正規表現を'[^-a-z0-9_]+'に変更することです。正規表現をパーサーに渡す可能性があります。しかし、いくつかの正規表現パーサーは本当に戸惑うかもしれませんし、それを受け入れることもできません。

私はpostgresをテストしていませんが、上記の正規表現を受け入れ、正しく処理できると思います。そうでなければ、マニュアルの正規表現の部分を見つけて、これについて何が言われているのかを理解する必要があります。

+0

ダッシュ ' - 'は、他の非英数字リテラルとはまったく異なるものですか?おそらくエスケープを受け入れないかもしれません。実際には、[^ a-z0-9 -_] 'には、範囲演算子のコンテキスト外で有効なダッシュリテラルが含まれています。 – sln

関連する問題