LoginSignup
14
12

More than 5 years have passed since last update.

Rubyの正規表現で複数選択のエスケープ文字について

Last updated at Posted at 2014-09-12

Rubyで複数選択で装飾文字を削除するとかなったときにちょっと困ったのでメモ

目的

  • ?とか.とかを正規表現でマッチしたい
  • 顔文字とかも正規表現でマッチしたい

事前知識

例えば、#gsubを使って、「?」を「!」に変えたいというときは

string = 'Hello World?'
string.gsub(/?/,'!') #=> エラーが出る

なんてことはできなくて、

string = 'Hello World?'
string.gsub(/\?/,'!') #=> 'Hello World!'

というように\でエスケープする必要がある。
エスケープしなければいけない文字列一覧は以下の通り(Macの場合)
\ * + . ? { } ( ) [ ] ^ $ - | /
(ちなみに、Windowsの場合は\¥です)

本題

ただ、実は複数選択でマッチしたいときにはそんなにエスケープする必要がない

例えば、「?」と「.」を全部「!」に変えたいとかなら

string = 'Hello World? Hello World.'
string.gsub(/[?.]/,'!') #=> 'Hello World! Hello World!'

とすると、エラーが出ない!

ただし、「-」に関しては範囲指定の役割があるので

string = 'Hello-World? Hello-World.'
string.gsub(/[?-.]/,'!') #=> エラーが出る

当たり前ですね。
マッチさせたいのであれば、

string = 'Hello-World? Hello-World.'
string.gsub(/[?\-.]/,'!') #=> 'Hello!World! Hello!World!'

のようにエスケープすることでマッチする。
これは複数選択の時のみ注意すべきなので、[]を使わない場合は-はエスケープしなくても大丈夫です。

追記

ハイフンを含めたい場合、 /[?-.]/ ではなく /[?.-]/ や /[-?.]/ にすれば問題ないですよ。

@riocampos さんからコメントいただきました!
要は、文字の間に入れるとダメみたいですね。
ありがとうございます!

参考URL

14
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12