クイックスタート
チュートリアル
ツール&&言語
リファレンス
書籍レビュー
正規表現の例
数値範囲
浮動小数点
電子メールアドレス
IPアドレス
有効な日付
有効な日付をテキストに変換する
クレジットカード番号
行を完全にマッチングする
重複行の削除
プログラミング
2つの近接した単語
落とし穴
壊滅的なバックトラッキング
繰り返しすぎ
サービス拒否
すべてをオプションにする
繰り返しのキャプチャグループ
Unicodeと8ビットの混同
このサイトの詳細
はじめに
正規表現のクイックスタート
正規表現のチュートリアル
置換文字列のチュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷用PDF
このサイトについて
RSSフィードとブログ
RegexMagic—Generate regular expressions matching integer numbers and ranges

正規表現を使った数値範囲のマッチング

正規表現は数値ではなくテキストを扱うため、特定の範囲の数値をマッチングするには少し注意が必要です。[0-255]と記述するだけでは、0~255の数値をマッチングすることはできません。これは正規表現として有効ですが、全く異なるものをマッチングします。[0-255]文字クラスであり、3つの要素があります。0~2の範囲の文字、文字「5」、もう1つの文字「5」です。この文字クラスは単一の数字の「0」「1」「2」または「5」をマッチングします。これは[0125].

と同じです。正規表現はテキストで動作するため、正規表現エンジンは0を1つの文字として扱い、255を3つの文字として扱います。0~255のすべての文字をマッチングするには、1文字から3文字の範囲をマッチングする正規表現が必要です。

次のような正規表現は[0-9]1桁の数字の0~9をマッチングします。[1-9][0-9]2桁の数字の10~99をマッチングします。これが簡単な部分です。

3桁の数字をマッチングするのは少し複雑です。256~999の数値を除外する必要があるからです。1[0-9][0-9]は100~199を処理します。2[0-4][0-9]は200~249をマッチングします。最後に25[0-5]は250~255を追加します。

ご覧のとおり、数値範囲を同じ数の桁を持つ範囲に分割する必要があります。それらの範囲はそれぞれ、各桁の変化を同じように許可する必要があります。この例の3桁範囲では、「1」で始まる数値は続く2桁に10桁すべてを許可しますが、「2」で始まる数値は続く桁に許可される桁を制限します。

連結を使用してこれらすべてを一緒にすると、次のように表現できます。[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]. これは目的の数値をマッチングしますが、1つの注意点があります。正規表現の検索は通常、部分一致を許可するため、正規表現は123の中の12345にマッチングします。これには2つの解決策があります。

数値範囲の検索

大きなドキュメントまたは入力文字列から数値を検索する場合は、単語の境界を使用して、有効なマッチングの前後に、非単語文字(または文字がないこと)を要求します。正規表現は次のようになります。\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b. 変項演算子は最も優先順位が低いため、括弧が必要となり、それぞれを変項にグループ化します。このようにすると、正規表現エンジンは最初にワード境界に一致し、次にすべての変項を試行し、最後に一致した数値の後に2番目のワード境界と一致しようとします。正規表現エンジンでは、すべての英数字文字と下線文字がワード文字と見なされます。

数値範囲の検証

正規表現を使って入力を検証する場合、おそらく入力全体が有効な数値で構成されていることを確認する必要があるでしょう。これを行うには、ワード境界をアンカーに置き換えて、文字列の先頭と終わりに一致します。^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$.

一致させたい一般的な範囲を以下に示します。