質問: このページを参考にしようと思ったのですが、コメントが気になったので質問します --- **Q1.「文字」と「文字の集まり」という分け方はおかしいでしょうか?** ・[ ] の仲間とは、具体的に何を意味しているのでしょうか? > > 「文字を表すメタキャラクタ」「集合を表すメタキャラクタ」っていう分け方がよく分からないです。 \d は文字クラスなので [ ] の仲間ですよね > > > --- **Q2.「文字クラス」のクラスについて** ・以前から疑問に思っていたのですが、「文字クラス」のクラスってどういう意味ですか? ・量指定子なら「演算子の仲間なのかな」と思うのですが ・ \d は、下記みたいなクラスがC言語か何かで定義されているのでしょうか? ・それをインスタンス化せずに使っているということ?? ``` class \d {} ```
回答: > > Q1.「文字」と「文字の集まり」という分け方はおかしいでしょうか? > > ・[ ] の仲間とは、具体的に何を意味しているのでしょうか? > > > メタキャラクタである`\d`と`[0-9]`は同じです。が、`[0-9]`のうちメタキャラクタは`[`と`-`と`]`です。 `[`と`]`というメタキャラクタに挟まれている`0-9`は`0123456789`に展開され、いずれか一文字にマッチします。 `[`及び`]`とか`(`及び`)`はあくまでも集合/グループを作ることを意味するだけで、その中身はリテラルやメタキャラクタで指定します。 というような区別をつけているのだと思います。 > > Q2.「文字クラス」のクラスについて > > ・以前から疑問に思っていたのですが、「文字クラス」のクラスってどういう意味ですか? > > ・量指定子なら「演算子の仲間なのかな」と思うのですが > > > 定義された文字の区分というか、ある文字と一致する定義した文字のセットというか、そういう感じの意味合いのようです。 正規表現エンジンによって予め定義されたものもあれば、自分で定義するものもあります。 参考文献 * Wikipediaの正規表現の項 * MSDNの正規表現での文字クラスのページ