【PowerShell】正規表現を使って電話番号をマッチングさせてみた

どうも!リョクちゃです。

ご無沙汰しております。

月日が流れてなんと1カ月更新できていなかったです。。。すみません!

気を取り直して、今回は正規表現をなんとPowerShellで使ってみた記事になります。

ちなみに前回はこちら

ふとPowerShellでスクリプトを書いていると行数を短くしたいという欲に駆られることはないでしょうか?例えば、いくつか関数を作っていて、1つの変数にいくつかの関数を組み合わせた答えを代入したいときとか。そういったときに1行で2回関数を呼び出す記述を紹介していきます。

正規表現とは?

調べてみると

正規表現(せいきひょうげん、regular expression)は、文字列の集合を一つの文字列で表現する方法の一つである。正則表現せいそくひょうげんとも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式せいきしきと呼ばれることもある。

出典:フリー百科事典『ウィキペディア(Wikipedia)』

となっています。

かいつまんで、解釈すると

とある文字列の中からあるパターン(正規表現のパターン)に

一致する文字列を検索する際に活用される表現法のひとつになります。

正規表現については、おそらく下記URLの記事がとても参考になります。

あえて、ここでは詳細には記載していませんのでご了承ください

サルにもわかる正規表現入門

スポンサーリンク




他言語での正規表現に関する記事

正規表現については、他の言語でも活用した記事を紹介していました。

VB.Net

MACアドレスを正規表現を使って判定する方法を紹介しています。MACアドレスは、0~9の半角数字にA~F(a~f)の半角英字で構成されます。

PowerShellで正規表現を使うには?

正規表現をPowerShellで使うには、

“検索したい文字列” -match “正規表現パターン”

と記述することで検索したい文字列が正規表現のパターンにマッチしているか

どうかを判定し、True/Falseで結果を返してくれます。

-matchが肝です。

電話番号

電話番号には、固定電話携帯電話、PHSなどがあります。

固定電話

総務省のページより

初めの0、国内プレフィックスから始まり。

・市外局番(1~4桁)

・市内局番(1~4桁)

・加入者番号(4桁)

となっています。

つまりは、

0 -【市外局番(1~4桁)市内局番(1~4桁)】- 加入者番号(4桁)

  • 0-▲-××××-□□□□
  • 0-▲▲-×××-□□□□
  • 0-▲▲▲-××-□□□□
  • 0-▲▲▲▲-×-□□□□

0 ⇒ 国内プレフィックス

▲ ⇒ 市外局番

× ⇒ 市内局番

□ ⇒ 加入者番号

のパターンが現在あるようです。

携帯電話・PHS

こちらも総務省のページより

070、080や090から始まる11桁の番号を携帯電話・PHSとしているようです。

元々070はPHSで使われていた番号なのですが、最近は携帯電話の番号を変更することなく、

移すことができる制度、MNP(携帯電話番号ポータビリティ)によって

携帯電話との区別がなくなってきました。※平成26年10月1日施行

パターンとしては

  • 070 – ○○○○ – ○○○○
  • 080 – ○○○○ – ○○○○
  • 090 – ○○○○ – ○○○○

になります。

電話番号の正規表現

ここからは前述した固定電話と携帯電話・PHSの正規表現を構築していきます。

固定電話の正規表現

固定電話の場合は、4パターンありました。

そのため正規表現は、以下のような形になります。

^0(([0-9]-[0-9]{4}|[0-9]{2}-[0-9]{3}|[0-9]{3}-[0-9]{2}|[0-9]{4}-[0-9])

-[0-9]{4})$

正規表現に使われる主な記号は以下の表にまとめています。

No記号機能
1^始まりを表す。
2$終わりを表す。
3[0-9]マッチする文字列の範囲を指定。
(今回の場合、文字列内に0~9が含まれているか)
4|ORのようなもの
右辺と左辺に書かれたパターンのどれかにマッチするかどうか。
5{n}n回の繰り返しにマッチするか
6-ハイフンがマッチするか。

最初は国内プレフィックスから始まるため、0を記述しています。

オレンジ()で囲まれた部分が、市外局番/市内局番の組み合わせを表す正規表現になります。

以降に続く、-[0-9]{4}が加入者番号を表現した記述になります。

携帯電話・PHSの正規表現

一方で携帯電話・PHSは以下のような形になります。

^((070|080|090)-[0-9]{4}-[0-9]{4})$

となります。

(070|080|090)では、はじまりが070080090であるかどうかを表しています。

後続の-[0-9]{4}でハイフンから始まり4桁の0~9で始まる数字

どうかを判定する表現になります。

正規表現を使って電話番号をマッチング

先で構築した正規表現のパターンを使って、実際に入力された情報が

固定電話か携帯電話・PHSかどうか試してみます。

固定電話:01-1234-5678を例にコードを書いていきます。

固定電話:012-234-5678

固定電話の正規表現で携帯電話をマッチングさせてみると

固定電話:012-3456-7890

Falseとなります。

次は、携帯電話・PHSのパターンを使って試していきます。

携帯電話:012-3456-7890

携帯電話:070-3456-7890

このような形で正規表現にマッチングしていれば、Trueを返し、

マッチングしていなければ、Falseを返します。

まとめ

以上、PowerShellで正規表現を使って電話番号をマッチングさせてみました。

正規表現、最初は戸惑いや難しくってついていけないといった問題に直面しますが、

慣れてくると、意外と便利ではないか。これは使えるな!となってくると思うので

諦めずに学びを止めないでください。

電話番号以外にも法則性のある文字列であれば、正規表現が作りやすいので

一度読者の方も試していただけたらなと思います。

代表例で言うと、郵便番号やMACアドレス、西暦などでしょうか。

最後までお読みいただき、ありがとうございます。

引き続きよろしくお願いいたします。

Windows PowerShell実践システム管理ガイド 第3版 マイクロソフト関連書

Windows PowerShell実践システム管理ガイド 第3版 マイクロソフト関連書

横田 秀之, 河野 憲義
3,971円(12/02 05:55時点)
発売日: 2017/10/20
Amazonの情報を掲載しています

スポンサーリンク