2012-04-16 8 views
2

私はpostgreSQLでregex_replaceを使用していて、文字列や数字ではない文字列を取り除こうとしています。regex_replaceはハイフン/ダッシュを置き換えません

select * from regexp_replace('blink-182', '[^a-zA-Z0-9]*$', '') 

戻り '点滅-182':しかし、この正規表現を使用しました。ハイフンは削除されず、私が期待するように何も( '')に置き換えられません。

ハイフンを置き換えるためにこの正規表現を変更するにはどうすればよいですか?私は多くの他の文字(!、。#)でテストしましたが、それらはすべて正しく置き換えられます。

アイデア?

+0

はそれは(...) '代わりに終わりが拾ってから' '$を削除 –

+0

(置き換える機能が一部から、本当に意味がないで)'選択REGEXP_REPLACEすべきではない '-'しかし、私はあなたがそれを必要と仮定します。あなたが一般的に行う正規表現が必要なことを教えてくれればもっと良いかもしれません。 – James

答えて

11

あなたは現在、文字列の末尾に英数字以外の文字の実行を交換してください。私はあなたのテストが主に文字列の末尾にあったので、働いていたfoobar!#の文字列であったと思います。正規表現から$を削除した文字列で、このような文字のすべての発生を置き換えるために

[^a-zA-Z0-9]+ 

は(も私は長さゼロのすべての文字の間で置き換え防ぐために+*を変え

あなたにも空白を保持したい場合は、文字クラスに追加する必要があります。

[^a-zA-Z0-9 ]+ 

または多分

[^a-zA-Z0-9\s]+ 

初めに正規表現が実際にあなただけの文字列の末尾から英数字以外の文字を削除することで修正された場合しかし、あなたははにハイフンマイナスを削除したいです文字列の真ん中(文字列の途中で他の英数字以外の文字を保持したまま)、次は動作するはずです:

[^a-zA-Z0-9]+$|- 

maniekはあなたがregexp_replaceに引数を追加する必要があることを指摘しますので、より多くを交換します一度一致するより:

regexp_replace('blink-182', '[^a-zA-Z0-9]+$|-', '', 'g') 
+0

これは空白も削除するようです。空白を許可する方法はありますか? –

+2

もちろん、文字クラスに空白を追加するだけです。 – Joey

+1

'regexp_replace( 'blink-182'、 '[^ a-zA-Z0-9] +'、 ''、 'g')'が必要です。 – maniek

関連する問題