正規表現

正規表現でのハイフン,マイナス(-)は文字クラスで使うと範囲指定

正規表現のハイフンの使い方
記事の要約
  • ハイフンは文字クラス外だと、そのまま
  • ハイフンは文字クラス内かつ文字列内だと、範囲指定
  • ハイフンは文字クラス内かつ先頭,末尾だと、そのまま

正規表現のハイフンは文字クラス外だと、そのまま

正規表現におけるハイフンは文字クラス [ ] 以外なら、記号そのままの意味として使われます。郵便番号や電話番号の際に使われるハイフンですが、エスケープをせずにそのまま表現可能です。

// 携帯電話が「3桁-4桁-4桁」の場合の表現
\d{3}-\d{4}-\d{4}

// 検索する文字列
080-1234-5678
090-1234-5678

// ヒットする文字列
080-1234-5678
090-1234-5678

正規表現のハイフンは文字クラス内だと、範囲指定

正規表現のハイフンは文字クラス内では、特定の範囲を表す記号に変化します。たとえば「[a-z]」と記載があれば「a」から「z」までのアルファベット小文字をすべて表します。「[a-zA-Z0-9]」であれば、アルファベットの大文字・小文字、数字のいずれか一文字を表します。

// 0〜9の数字が1桁以上続く文字列を検索
[0-9]+

// 検索する文字列
080-1234-5678
090-1234-5678

// ヒットする文字列
080
1234
5678
090
1234
5678

[例外] 文字クラスの先頭か末尾でも、そのまま

文字クラス内でハイフンを使っている場合の例外として、文字クラスの先頭または末尾に使われている場合は単なる文字として扱われます。具体的には「[-XXXXXXX]」や「[XXXXXXX-]」のような場合が当てはまります。

// 0〜9またはハイフンが1文字以上続く文字列を検索
[0-9-]+

// 検索する文字列
080-1234-5678
090-1234-5678

// ヒットする文字列
080-1234-5678
090-1234-5678

上記では文字クラス内の[0-9]に加えて末尾にハイフンを入れています。これにより、0〜9の数字およびハイフンのいずれか一文字を表す表現が可能です。

シャワーズ

文字クラス内でハイフンを使う場合には範囲を指定したいのか、単に記号として使いたいのかを整理して用いましょう!