/[[:space:]]/ などの表現で “[” を二重に使わないとダメな理由

投稿者: Anonymous

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

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

解決

[:space:]といった記法は「POSIX文字クラス」と呼びます。
どちらも「文字クラス」という表現が入っているため、紛らわしいのですが、「文字クラス」の内容のひとつとして「POSIX文字クラス」を記述する、という形です。
正規表現のリファレンスマニュアルで、「文字クラス」の副節として「POSIX文字クラス」があることに注意して下さい。

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

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

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *