10543


NBSPを単なるスペースに置換する時には`str.gsub(/[[:space:]]/," ")`
などの方法が使えることがわかったのですが、文字クラスは`[:space]`部分を指すとマニュアルにありました。

`[[`と二重になっている理由はなぜなのでしょうか？  
一重では正規表現扱いになってしまうからと推測したのですが、それであっていますか？


CC BY-SA 3.0
2015-05-23T11:07:25.307
10541
2015-05-23T14:53:02.607
3271
question
ruby 正規表現
/[[:space:]]/ などの表現で "[" を二重に使わないとダメな理由


POSIXのブラケット表現は文字クラスの中でのみ使用できます。  
`/[:space:]/`だけの場合、 `:`,`s`,`p`,`a`,`c`,`e` のどれか1文字にマッチする文字クラスとして解釈されます。


CC BY-SA 3.0
2015-05-23T12:37:07.193
10542
2015-05-23T12:37:07.193
3639
10541
answer


`[:space:]`といった記法は「POSIX文字クラス」と呼びます。  
どちらも「文字クラス」という表現が入っているため、紛らわしいのですが、「文字クラス」の内容のひとつとして「POSIX文字クラス」を記述する、という形です。  
[正規表現のリファレンスマニュアル](http://docs.ruby-
lang.org/ja/1.9.3/doc/spec=2fregexp.html)で、「文字クラス」の副節として「POSIX文字クラス」があることに注意して下さい。

要するに、POSIX文字クラスの立ち位置は、`[abcd]` や `[\w]` 中の `abcd` や `\w` と同様です。  
そのため、文字クラス`[...]`の中に`[:space:]`を入れることで、`[[:space:]]`となるのです。

(補足)  
POSIX文字クラスも、文字クラスの内容のひとつに過ぎないので、ひとつの文字クラスの中に、他の内容も混在させることができます。

例:  
`/[[:space:][:upper:]c]/` : 空白と大文字と `'c'` にマッチ


CC BY-SA 3.0
2015-05-23T12:38:58.157
10543
2015-05-23T14:53:02.607
2015-05-23T14:53:02.607
7831
7831
10541
answer