今回は、正規表現で扱われるメタ文字の中で”文字クラス“について解説していきます。
前回、量指定子について解説していますので、ぜひそちらの記事も御覧ください!
目次
正規表現メタ文字【文字クラス】とは?
文字クラスとは、文字の種類を意味するものを指します。
「指定された範囲に含まれる文字」を表し、その中に含まれる文字のいずれか1文字にマッチします。
例えば、[a-z]や\dなどがあります。
メタ文字【文字クラス】の例
[] (指定した文字のどれか)
例を見ていきましょう。
例) [左右]足
- 左足 ○
- 右足 ○
- 両足 ✕
今回[]の中には、”左右”の文字が入っているため、左足や右足にマッチします。
両足はどちらの文字にも当てはまらないためマッチしません。
[A-Z] (英大文字)、[a-z] (英小文字)
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]→-(ハイフン)を使用し[A-Z]のように記述を省略することができます。例を見ていきましょう。
例) [A-Z]班
- A班 ○
- B班 ○
- b班 ✕
B班にマッチしても、小文字のb班にはマッチしません。
[A-Z]の様な表現は、量指定子と組み合わせて使用することが多いです。量指定子が何かわからない場合は、以前の記事を御覧ください!
量指定子と組み合わせた場合の例を見ていきましょう。
例) [A-Z]+さん
- ABCさん ○
- DaiGoさん ✕
- さん ✕
[A-Z]+は、英大文字の1回以上の繰り返しを表しています。
そのため英小文字が入っているDaiGoさんはマッチしません。
また1回以上の繰り返しになりますので、”さん”だけもマッチしません。
[ぁ-ん](全角ひらがな)、[ァ-ヶ](全角カタカナ)、[一-龥々](漢字)
全角カタカナの正規表現ですが、ひらがなと同じように[ア-ン]じゃいけないの?と思った方がいるかもしれません。
文字クラスの指定範囲は、UTF-8文字コード表の並びに則っています。
そのため[ア-ン]で指定した場合に、ァ(小文字のア)やヶ(小文字のケ)、ヴが含まれていないため”ヴァイオリン”や”エヴァンゲリオン”はカタカナなのに弾かれてしまいます。
漢字[一-龥々]に関しては、ハイフンではなく漢数字の一になり、龥は”ゆ“と読みます。
々をつけることで、佐々木などの文字もマッチさせることができます。
例) [ぁ-んァ-ヶ一-龥]*さん
- マイケルさん ○
- 中村アンさん ○
- 佐々木さん ✕
- メアリーさん ✕
今回の場合ですと、々やー(全角のハイフン)は表記していないため、佐々木さんやメアリーさんはマッチしません。
以下のように記述することでマッチさせることが可能です。
[ぁ-んァ-ヶ一-龥々ー]*さん
- 佐々木さん ○
- メアリーさん ○
[0-9]、\d(半角数字)
半角数字の表現は2通りになります。
- [0-9]
- \d
どちらを記述しても同じ意味になります。
例を見ていきましょう。
例) スーパーマリオ\d?
- スーパーマリオ ○
- スーパーマリオ2 ○
- スーパーマリオ64 ✕
?の意味覚えていますでしょうか。
?は直前の文字が0回又は1回以上繰り返すになりましたね。
直前の文字は\d(半角数字)になりますので、半角数字が0回又は1回以上繰り返されていればマッチします。
スーパーマリオ64は半角数字が2つありますので、マッチしません。
{n}(直前の文字クラスn文字指定)、{m, n}(m文字以上n文字以下)
文字数を指定する場合の表現になります。
例を見ていきましょう。
例) 0[789]0-?\d{4}-?\d{4}
- 090-1234-5678 ○
- 09012345678 ○
- 090-123-4567 ✕
今回は携帯電話の番号の表現をしました。
-?によって、-(ハイフン)が0回又は1回以上繰り返していればマッチします。
そのため、090-1234-5678、09012345678はマッチすることになります。
090-123-4567は123の部分が指定した文字数ではないためマッチしません。
今回はここまでとします。
少しずつ難しくはなっていますが、繰り返し使用することで確実に身についていきます。
この記事によって少しでも苦手意識がなくなってくれると嬉しいです。
次回は、アンカーを解説していきたいと思います。
最後までご覧頂きありがとうございました。