42288


[このページ](https://qiita.com/ik_miyabi/items/12d1127056cdf4f0eea5)を参考にしようと思ったのですが、コメントが気になったので質問します

* * *

**Q1.「文字」と「文字の集まり」という分け方はおかしいでしょうか？**  
・[ ] の仲間とは、具体的に何を意味しているのでしょうか？

> 「文字を表すメタキャラクタ」「集合を表すメタキャラクタ」っていう分け方がよく分からないです。 \d は文字クラスなので [ ] の仲間ですよね

* * *

**Q2.「文字クラス」のクラスについて**  
・以前から疑問に思っていたのですが、「文字クラス」のクラスってどういう意味ですか？  
・量指定子なら「演算子の仲間なのかな」と思うのですが

・ \d は、下記みたいなクラスがC言語か何かで定義されているのでしょうか？  
・それをインスタンス化せずに使っているということ？？

[code]

    class \d {}
    
[/code]


CC BY-SA 3.0
2018-03-10T02:40:45.753
42284
2018-03-10T09:12:33.443
7886
question
正規表現
正規表現の文字クラスについて


> Q1.「文字」と「文字の集まり」という分け方はおかしいでしょうか？  
>  ・[ ] の仲間とは、具体的に何を意味しているのでしょうか？

メタキャラクタである`\d`と`[0-9]`は同じです。が、`[0-9]`のうちメタキャラクタは`[`と`-`と`]`です。  
`[`と`]`というメタキャラクタに挟まれている`0-9`は`0123456789`に展開され、いずれか一文字にマッチします。  
`[`及び`]`とか`(`及び`)`はあくまでも集合/グループを作ることを意味するだけで、その中身はリテラルやメタキャラクタで指定します。  
というような区別をつけているのだと思います。

> Q2.「文字クラス」のクラスについて  
>  ・以前から疑問に思っていたのですが、「文字クラス」のクラスってどういう意味ですか？  
>  ・量指定子なら「演算子の仲間なのかな」と思うのですが

定義された文字の区分というか、ある文字と一致する定義した文字のセットというか、そういう感じの意味合いのようです。  
正規表現エンジンによって予め定義されたものもあれば、自分で定義するものもあります。

参考文献  
* [Wikipediaの正規表現の項](https://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE)  
* [MSDNの正規表現での文字クラスのページ](https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/character-classes-in-regular-expressions)


CC BY-SA 3.0
2018-03-10T04:30:28.233
42288
2018-03-10T04:43:53.963
2018-03-10T04:43:53.963
25936
25936
42284
answer


「メタキャラクタ」は英語の「Meta-
characters」の直訳です。そして「[meta](https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF#%E7%8B%AD%E7%BE%A9%E3%81%AE%E3%83%A1%E3%82%BF)」は

> ある対象を記述したものがあり、さらにそれを対象として記述するものを、メタな○○、あるいは単にメタ○○と呼ぶ。

とあります。つまり「メタキャラクタ（文字）」は「文字を記述する文字」程度の意味です。例えば`\d`だったり`[0-9]`という文字を記述した場合に正規表現としては`0`～`9`が該当する、という意味が与えられているということです。

* * *

「文字クラス」は英語の「Character
Classes」の直訳です。そして「[class](https://ejje.weblio.jp/content/class.)」は

> (共通の性質を有する)部類、種類、(学校の)クラス、学級、組、(クラスの)授業(時間)、(編物教室などの)講習、クラスの生徒たち、同期卒業生、同年兵

とあります。つまり「文字クラス」とは「共通の性質を有する文字の種類」程度の意味です。例えば`\d`とは数字という性質を持つ文字の種類なので`0`～`9`等が該当するわけです。


CC BY-SA 3.0
2018-03-10T08:33:54.623
42292
2018-03-10T09:12:33.443
2018-03-10T09:12:33.443
4236
4236
42284
answer