LoginSignup
3
2

More than 5 years have passed since last update.

文字列から \w と - 以外の文字を排除する方法二題

Last updated at Posted at 2014-08-21
  • \w 単語構成文字 [a-zA-Z0-9_]

String#gsub を使って、不要な文字を空文字に置き換えてしまうのがラクですよね。

\w- 以外の文字クラスを用意する

そして文字列から該当文字を排除する。一番単純な発想(というかお題を考えればコレが真っ先に出る)。

phrase.gsub(/[^\w-]/, "")

\W から - を除去した文字クラスを用意する

\w 以外の文字全体の文字クラスが \W[^a-zA-Z0-9_])なので、ここから - を排除した文字クラスを作りたい。

文字クラスの復習

文字クラス

文字クラス(character class) とは角括弧 [ と ] で囲まれ、1個以上の文字を列挙したもので、 いずれかの1文字にマッチします。
 :
文字クラス内に別の文字クラスを含めることができます。 [a-z[0-9]][a-z0-9] と同じ意味を持ちます。これだけではあまり意味がありませんが、文字クラスは && という、共通部分を取る演算をサポートしているため、これと組合せることで意味を持ちます。文字クラスでは、否定(^)範囲(-)共通部分(&&)列挙(並べる)という演算が可能ですが、これらは - > (列挙) > && > ^ という順の結合強度を持ちます。
文字クラス内の3つのメタ文字を通常の文字の意味で使用したい場合には、 \ によってエスケープする必要があります。
正規表現|るりま

共通部分を導出

  • \W から - を除去する
  • つまり - 以外の文字全体([^-])と \W との共通部分(積)を取る
  • 文字クラス内に文字クラスを組み合わせて [\W&&[^-]]
phrase.gsub(/[\W&&[^-]]/, "")

あとがき

\W \S \D \H などの \w \s \d \h 以外の文字全体の文字クラスは個人的にほとんど使いません。
しかしなぜか \W を使っていた正規表現を元にして変更するときに && を使ったのでメモ書きしました。
でも、大元に立ち返って \w から考え直した方が楽そうです。

3
2
0

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
3
2