正規表現

正規表現での数字一覧 | 繰り返し,整数,小数など細かなパターンも解説

正規表現での数字表現まとめ

正規表現での数字は\d, [0-9]

正規表現で1桁の数字を表す場合には「\d」「[0-9]」のいずれかを用います。

// 1桁の数字
\d
[0-9]

// 1桁以上の数字
\d+
[0-9+]

// 1桁以上の数字(数字のみの行の場合)
^\d+$
^[0-9+]$

「\d」と「[0-9]」は一部の環境以外においては同様に数字1桁を表します。1桁以上の数字としたい場合には、直前のものを1回以上繰り返す意味の「+」をつければOKです。

該当する行が数字のみの場合は文頭に「^」文末に「$」をつけるのをおすすめします。「123」のような数値を探したい場合に「1」「2」「3」「12」「23」「123」のいずれもヒットさせてしまうパターンを防げます。

整数の正負, 0抜き, 全角含むの表現

整数の正負の符号つくパターン、「012」のように先頭に0がつくのを防ぐパターン、全角数字を許容するパターンなどについてはそれぞれ次のようになります。

  • 正負の整数は「^[+-]\d+$」「^-?\d+$」
  • 0を抜いた正の整数は「^[1-9]\d*|0$」
  • 半角数字と全角数字の正の整数は「^[0-90-9]+$」

詳しくは次の記事で紹介しています。

数字以外の表現は\D

数字以外をヒットさせたい場合には「\D」を用います。たとえば

  • 英文字
  • ひらがな、カタカナ、漢字
  • 記号
  • スペース、改行

などかなり多くのものを表現できます。ただ想定外の記号等を含む可能性もあるため注意して使うようにしましょう。

シャワーズ

「\D」や「\W」のように大文字の場合は「\d」「\w」の否定を意味すると覚えるといいよ!

正規表現での数字繰り返しと範囲指定

数字の繰り返しを表現するにはいくつかのパターンがあり、大きく2つにわかれます。

  • A:「*(0桁以上)」「+(1桁以上)」「?(0or1桁)」のいずれかを使う方法
  • B:「{N,M}」で◯〜◯桁と指定する方法

A:「*(0桁以上)」「+(1桁以上)」「?(0or1桁)」

「*」「+」「?」はそれぞれ次のような特殊記号です。

これを冒頭の「\d」と組み合わせると

  • 「\d*」は0桁以上の数字(=数字があるパターンとないパターンどちらでもOK)
  • 「\d+」は1桁以上の数字(=数字があるパターンのみ)
  • 「\d?」は数字が1桁あるかないか

を意味するものとなります。たとえば次のような文字列があった場合、

  • わざマシン
  • わざマシン1
  • わざマシン123

それぞれの繰り返し表現に当てはまるものは次のとおりになります。

// わざマシン
わざマシン\d* // OK
わざマシン\d+ // NG
わざマシン\d? // OK

// わざマシン1
わざマシン\d* // OK
わざマシン\d+ // OK
わざマシン\d? // OK

// わざマシン123
わざマシン\d* // OK
わざマシン\d+ // OK
わざマシン\d? // NG

「*」を使えば1番多くのパターンにマッチできますが、反対に不用意なマッチも引き起こしてしまうので適宜「+」や「?」と使い分けをしましょう。

B:「{N,M}」で◯〜◯桁と指定

◯桁(例:2桁, 4桁)

N桁を表現するには、直前の文字をN回繰り返す意味の「{N}」を用いて表現します。「{N}」を数字を表す「\d」と組み合わせると次のように表現できます。

// 2桁の数字
\d{2}

// 4桁の数字
\d{4}

◯桁〜◯桁(例:2〜4桁)

N〜M桁を表現するには、直前の文字をN〜M回繰り返す意味の「{N,M}」を用いて表現します。「{N,M}」を数字を表す「\d」と組み合わせると次のように表現できます。

// 2〜4桁の数字
\d{2,4}

◯桁以上,◯桁以下,(例:2桁〜,〜4桁)

「{N,}」は直前の文字をN回以上繰り返すのを、「{,M}」は直前の文字をM回以下繰り返すのを表現します。これを数字を表す「\d」と組み合わせると次のように表現できます。

N桁以上を表現するには直前の文字をN回以上繰り返す意味の「{N,}」を、M桁以下を表現するには直前の文字をM回以下繰り返す意味の「{,M}」を用います。「{N,}」と「{,M}」を数字を表す「\d」と組み合わせると次のように表現できます。

// 2桁以上の数字
\d{2,}

// 4桁以下の数字
\d{,4}

◯桁の連番は難しい

13〜59のように連続した数値を表す表現(連番)は、正規表現では複雑になる傾向にあります。1桁、2桁以上の正規表現の例は次のとおりです。

  • 1桁の連番は、\d, または[0-9]
  • 2桁以上の連番(例:13〜59)は、1[3-9]|[2-5][0-9]のように複雑になる

詳しくは次の記事で紹介しています。

正規表現での小数の表し方

正規表現で小数を表す方法にはたとえば次のような表現があります。

  • 小数(正の数)は「^\d+.\d+$」
  • 整数または小数(正の数)は「^\d+(?:.\d+)?$」
  • 整数または小数(正の数, カンマ桁区切り)は「^[\d,]+(?:.\d+)?$」
  • 整数または小数(正負OK)は「^[+-]?(?:\d+.?\d|.\d+)$」
  • 浮動小数点数は「^[+-]?[0-9]+.[0-9]+([eE][+-]?[0-9]+)?$」

小数は細かいパターンを加味するとどこまででも細かくかけてしまうため、例をふまえてどれを採用すべきかよく吟味しましょう。詳しくは次の記事で紹介しています。

正規表現での数字とカンマのみ, ハイフンのみ

数字とカンマのみは、[\d,]+

単に数字とカンマのみを表すのであれば「[\d,]+」とすれば問題ありません。もしカンマでの桁区切りをより厳密に記そうとするのであれば次のような表現があります。

  • 桁区切りされた数値は「\d{1,3}(,\d{3})*」 で判定
  • 数値を桁区切りに変換する表現は、「(\d{1,3})(?=(\d{3})+(?!\d))」で検索して 「$1,」 で置換

ただExcelの表記設定やプログラミング言語の関数のほうが簡単なケースも多いので、正規表現を使うべきかは要検討です。詳しくは次の記事で紹介しています。

数字とハイフンのみは、[\d-]+

単に数字とカンマのみを表すのであれば「[\d-]+」とすればOKです。

シャワーズ

01-のいずれか1回以上を「[0-1]+」と表現すると「0〜1を1回以上」の意味になってしまうので、「[01-]+」のように順番に注意して書きましょう!