どうも!リョクちゃです。
今回は、正規表現といわれる表記方法を使って、
与えられた値がMACアドレスかどうかを判定する方法を紹介していきます。
ちなみに前回の記事はこちら
目次
正規表現とは
簡単に正規表現について紹介します。
正規表現(英語:Regular expression 略:regex)は、
テキストのパターンの記述法で文字列などの記号列を表現する形式言語と
説明されることが多いです。
形式言語とは、
形式言語(けいしきげんご、英: formal language)は、その文法(構文、統語論)が、場合によっては意味(意味論)も、形式的に与えられている(形式体系を参照)言語である。
引用元:Wikipedia
特定の目的のために、意図的に作られた言語のことを形式言語といいます。
一方で、対照的になるのが自然言語になります。
自然言語は、私たちの生活の中で自然に発生した日本語や英語などの言語のことです。
形式言語と違って、特定の目的のために作れられるものではありません。
例えば、プログラミング言語も形式言語の一つになります。
これは、明確な定義のもとで、作成された形式(フォーマット)に従い、
コンピュータは文字やプログラムを理解しています。
コンピュータに理解させる目的のために作られているから形式言語に分類されます。
このような形式言語の表記方法として、代表的な記法に正規表現が含まれています。
他にもBNFなどがあります。
ここまでの関係性を図示しておきます。
VB.Netで正規表現を使う
正規表現について簡単に説明してきましたが、
ここでVB.Netで正規表現を使うにはどうしたらいいか紹介していきます。
VB.Netで正規表現を使うには、
をインポートもしくは呼び出してあげることで使います。
今回は、MACアドレスの判定をするので、RegexクラスのIsMatchメソッドを使用します。
IsMatchメソッドは、与えられた入力値が指定のパターンと完全一致するかどうかを判定してくれるメソッドになります。
MACアドレスを判定するパターン
ところでMACアドレスについては、下の記事をご参考ください。
パターンは規則を表すメタ文字を使って、作ります。
下にメタ文字の一覧を示します。
No | メタ文字 | 詳細 |
---|---|---|
1 | [A - Z] | 半角の英字の大文字1文字を表す |
2 | *(アスタリスク) | 直前の正規表現の0回以上の繰り返し |
3 | + | 直前の正規表現の1回以上の繰り返し |
4 | ? | 直前の正規表現が0個また1個あることを表す |
5 | | | 左右にある正規表現のいずれかを表す |
6 | ^ | 行頭の位置 |
7 | $ | 行末の位置 |
8 | ¥X | 直後のメタ文字をエスケープ |
9 | {X} | 量指定子。直前のパターンが何回続くかをXで指定。 |
パターンを作るには、
^で始まり、$で終わるように記述します。
例えば、電話番号を表すパターンは下のようにして表すことができます。
と表記することで、電話番号かどうか判定ができるようになります。
MACアドレスを正規表現で判定する
MACアドレスを判定するパターンには、電話番号のパターンを例に
考えると、
と表記することで、MACアドレスかどうか判定ができるようになります。
※MACアドレスのハイフンを取り除いたパターンになります。
実際に、Windowsフォームを作って確認してみます。
今回は下のようなフォーム画面を作成しました。
ちなみに筆者の環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
です。
アプリケーションの目的
目的としては、判定と書かれたボタンを押すことで、
入力された値がMACアドレスかどうか判定し、
判定結果にOK/NGを表示することを目的としています。
コードは下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Public Class testRegex ''' <summary> ''' ボタンが押されたら ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' テキストボックスに入力されていなければ処理しない If Me.TextBox1.Text <> "" Then ' MACアドレスのパターンを変数に格納 Dim macPattern As String = "^([0-9A-F]{2}){5}([0-9A-F]{2})$" ' 第1引数に判定したい入力値を設定 ' 第2引数に検索パターンを設定 If System.Text.RegularExpressions.Regex.IsMatch(Me.TextBox1.Text, macPattern) Then ' MACアドレスなら判定結果にOKと表示 Me.Label3.Text = "OK" Else ' MACアドレスじゃないなら判定結果にNGと表示 Me.Label3.Text = "NG" End If End If End Sub End Class |
判定した結果を下に表示します。
OKパターン(MACアドレスだったとき)
NGパターン(MACアドレスではないとき)
まとめ
今回は、正規表現を使ったMACアドレスの判定方法について例を交えて解説していきました。
正規表現は、覚えておくと入力値の判定において非常に役立つ技法になります。
例えば、正規表現を活用して郵便番号や電話番号、
メールアドレスを判定することも可能になります。
ぜひ、これをきっかけに正規表現を覚えてもらえればと思います。
最後に、VB.Netを勉強する上で参考になる書籍を下に取り上げています。
良ければご参考までにご覧いただければと思います。
・こちらの書籍を参考にVB.Net勉強しています。