トップ 正規表現とは 基本のメタ文字 練習問題

その他の基本的な注意点


カタカナの指定について

 「文字を指定するメタ文字」のページで、カタカナを指定する方法を解説しましたが、[ア-ン]と指定しても「ヴァ」や「ー(のばし棒の記号)」など、一部の文字を指定できません。これでは、実際の作業の時に不便です。

 そこで、カタカナを指定するときには次のように書いてください。

[ァ-ヶー]

 こうすることにより、すべてのカタカナをカバーすることが可能です。ただし、環境によっては文字コードが違うために、不具合が起きてしまうことも考えられるので注意が必要です。


数字の指定について

 いままでの解説では正規表現で数を指定するには、[0-9]という表記をしてきました。これは一桁または1文字だけの数字をを検索するには有用ですが、桁の数が上がると使用できません。

 正しい数字の指定について、IPアドレスを例にとって見てみましょう。IPアドレスとは、インターネットに接続されたコンピュータ一台一台に割り振られた識別番号のことです。「192.168.0.1」のように、0から255までの数字を4つ並べて表現されます。今回は、解説と言うことで、0縲怩Q55までの数字の指定についてのみ考えてみます。また、000は0、005は5とするなど、桁埋めに0を使用しないものとします。

 まず、単純に次のように書いたとします。

[0-9]{1,3}

 確かに、0縲怩Q55までの数字はマッチします。しかし、256や842など、IPアドレスでは使用できない数字までマッチすることになります。

 今回のように、中途半端な数を上限として指定したい時は、桁ごとに少しずつ分けて考えていく必要があります。今回は、0や1、5など一桁のみの数字、12や54など、二桁の数字、そして149や255など、255までの三桁の数字にマッチする正規表現をそれぞれ考えます。

①一桁の数字について

   まず、一桁めは[0-9]までで大丈夫です。これは、5や0など、一桁のみの数字にマッチします。

②二桁の数字について

   つぎに、34や93のような二桁の数字にマッチする正規表現です。これは、「10縲怩X9」までの数を指定する必要があります。そのため、まずこれらの数字を一の位と十の位の組み合わせでできる文字列と考えてください。二桁の数字の範囲では、一の位は「0縲怩X」までの範囲で変化します。十の位は「1縲怩X」までの範囲で変化します。つまり、二桁の数字はこれらの組み合わせ、つまり

[1-9][0-9]

③三桁の数字について

 三桁の数字の指定は今までのものより複雑です。「100縲怩Q55」をいきなり指定しようと考えがちですが、正規表現ではそのような指定はできません。「百の位=1か2」「十の位=0縲怩T」「一の位=0縲怩T」と書けばうまくいきそうですが、そうすると、十の位と一の位で6縲怩Xまでの数字が検索されません。つまり、169や198などがマッチしません。「百の位=1か2」「十の位=0縲怩X」「一の位=0縲怩X」とすると、0縲怩Q55までのすべての数字をマッチさせることができますが、同時に256や289など、IPアドレスで使用できない数字までマッチしてしまいます。

 そこでまず、単純にカウントアップしていくだけの「100縲怩P99」までについて考えてみます。この範囲では、百の位の数字は1で変わりません。十の位と一の位はともに0縲怩Xまで変化するため、正規表現は次のようになります。

1[0-9][0-9]

   次に「200縲怩Q49」までの範囲を考えます。なぜ、こんなに中途半端な範囲を考えるかというと、「200縲怩Q55」という範囲を直接指定できないからです。先ほどと同じように、「百の位=2」「十の位=0縲怩T」といった具合で指定できそうですが、一の位は200縲怩Q49までのときは0縲怩Xまでのあいだで変化します。しかし、250縲怩Q55の範囲では0縲怩Tまでの間でしか変化しません。[0-9]とすると256や259がマッチしてしまうし、[0-5]としてしまうと206や249がマッチしません。そのため、まずは200縲怩Q49という範囲を指定する正規表現を考えます。

 この範囲では、百の位は変化しないため「2」で問題有りません。十の位は「0縲怩S」、一の位は「0縲怩X」となります。

2[0-4][0-9]

 最後は「250縲怩Q55」までの範囲です。これは一の位しか変化しないため、単純に次のように指定します。

25[0-5]

 最終的にこれをうまくまとめる必要があります。「一桁の数字」または「二桁の数字」または「三桁の数字」が有ればいいわけですから、選択を表すメタ文字を使います。また、行頭と行末を表すメタ文字を使いまとめます。

^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$

 位が変わったり、繰り上がりがある場合、また255などのように、中途半端な数を指定するときは特に注意が必要です。

ページの一番上へ トップへ戻る