コラム

正規表現って難しい? Part 2(2桁以上の数字の連番表現)


2020年もあっという間に4カ月経ってしまいました。
前回の掲載から1年3カ月も経ってしまいました。
すみません。
今年は、コンスタントに更新できるよう頑張ります!!


前回の復習

さて、前回の復習ですが、1桁の数字の連番は[-]を使うことで簡単に表現できました。

例)1から5の連番 : [1-5]

では、2桁以上の数字の連番を表現するには、どうすれば良いでしょうか?


2桁数字の連番指定

1~58までの連番の表現にチャレンジしてみましょう。
前回の[-]を使って、以下のようにしてみたらどうなるでしょうか。

[1-58]

残念ながら、上記の表記だと1桁数値の1, 2, 3, 4, 5, 8となってしまいます。
([]の1-5が1, 2, 3, 4, 5を示し、8が8を示す)
前回注意した通り、[-]で表現できる連番は、あくまで『1桁数字』のみです。
では、どう表現すれば良いのか、順を追って考えていきます。

  • Step.1

  • まずは桁数別に数字を分割します。今回の場合は、1~9、10~58となります。
    そこでまず、1~9[1-9]と表現することができます。

  • Step.2

  • 次は、2桁の数字の1桁目の数字が、共通なものと共通じゃないものに分類分けします。
    今回の場合は、10~49が1桁目が0~9と共通で、50~58が共通じゃないものになります。

  • Step.3

  • まずは1桁目が共通の10~49を表現していきます
    複数桁ある場合は、桁毎に分割して考えます。

    1桁目は0~9ですので、[0-9]と表現できます。
    2桁目は10~49ですのでパターンとしては1~4となり、[1-4]と表現できます。

    これらの正規表現を[1-4][0-9]と続きて表示することで、10~49を表現する正規表現となります。

  • Step.4

  • 続けて、1桁目が共通じゃないものを表現していきます。
    こちもら先ほどと同様に、桁毎に分割して考えます。

    1桁目は0~8ですので、[0-8]と表現できます。
    2桁目は50~58ですのでパターンとしては5となり、単純に5と表現できます。

    あとは前回同様にと5[0-8]続けて表記すれば、50~58を表現する正規表現になります。

  • Step.5

  • あとは個別に作った3つの正規表現を合わせるだけとなります。
    その際に使用するのが、()(カッコ)と|(パイプ)になります。

    以下の例のように、()内に|区切りで記載すると、OR条件の表現が可能となります。

    例)AまたはBまたはC:(A|B|C)

    よって、以下のように今まで作成したものを()内に|区切り表記することで1~910~4950~58を表現することになり、
    結果、1-58の正規表現となります。

    ([0-9]|[1-4][0-9]|5[0-8])

    このような感じで、桁毎に分類分けして考えていくと、複数桁の連番の正規表現が作れるようになります。

    ただ桁数が増えれば増えるほど、作るのが面倒になりますが、ご安心ください。
    世の中には、最初と最後の数字を入れるだけで正規表現を作ってくれるサイトもあったりします。

    時間に余裕がない場合はそういうサイトを利用して頂き、余裕があるときは、脳トレの気分で自力で作成してみては如何でしょうか。


    以上、今回のネタは終わりです。
    まだ、次回のネタを考えてはいませんが、正規表現にまつわる小ネタについて掲載を続ける予定です。
    お楽しみに~




    『正規表現』を利用して監視アラートをフィルタし、それぞれの条件のもと、アクションを自動実行します。
    アラート内容をもとに、運用の自動化が図れるサービスが、弊社の提供する「AMF(アラートメールフィルタ)」です。
    詳細は、こちらをご覧ください。


    お問い合わせ

    お気軽にお問い合わせください。

               お問い合わせへ