RegexDesigner.NETとは
正規表現を理解するには実際に試してみることが一番の近道です。また、ASP.NETのRegularExpressionValidator
コントロールを使ったアプリケーションを作る場合などにも、ブラウザでテストする前に、パターン文字列だけを先にテストした方が簡単にバグを見つけることができます。
そこで本稿ではRegexDesigner.NETというGUIツールを利用します。RegexDesigner.NETは、Chris Sells氏が中心となってGodDotNet.comにて開発を進めていた正規表現用のツールです。他にも正規表現をチェックするツールはありますが、本稿では使い勝手の良さからRegexDesigner.NETを利用します。
RegexDesigner.NETの特長
RegexDesigner.NETには、次のような機能が備わっています。
- GUIの画面から.NETの正規表現(マッチング、置換、分割)を簡単に試せる
- 正規表現のパターン、チェック文字列、オプションをプロジェクトとして保存できる
- 簡単なソースコードを生成できる(VB/C#)
RegexDesigner.NETは外国では人気のあるツールですので、正規表現を使う機会が多い方や、正規表現をマスターしたい方はインストールしてみてはいかがでしょうか。
RegexDesigner.NETのインストールと起動
RegexDesigner.NETを入手するには、Chris Sells氏のホームページから最新のファイルをダウンロードします。ダウンロードファイルの解凍後、「setup.msi」をダブルクリックするとインストーラが立ち上がるので、[次へ]をクリックしてインストールを完了させてください。
インストールが完了すれば、スタートメニューから、[すべてのプログラム]をポイントして[Sells Brothers RegexDesigner.NET]-[RegexDesigner.NET]とクリックすれば、RegexDesigner.NETを起動することができます。
例題の構成
本稿は、全部で10個の例を使って正規表現について説明しています。
- 例1では、RegexDesigner.NETの基本的な使い方について説明します
- 例2~例4では、ファイル名を使って「マッチングの基本」について説明します
- 例5と例6では、郵便番号を使って「マッチングの応用」について説明します
- 例7と例8では、電話番号を使って「抽出・置換」について説明します
- 例9では、メールアドレスを使って「分割」について説明します
- 例10では、.NETでの正規表現プログラミングについて説明します
結構ボリュームがありますので、無理せずマイペースで読み進めていってください。
例1:文字のマッチング(abc) ~RegexDesigner.NETとパターンの基本~
それではRegexDesigner.NETを使って正規表現の例を説明していきましょう。
まずは、簡単な文字のマッチングをしてみましょう。RegexDesigner.NETのインストールが完了したら、ダウンロードファイルに含まれる「01_文字のマッチング(abc).rep」をダブルクリックして開いてください。拡張子がrepのファイルはRegexDesigner.NETのプロジェクトファイルで、パターン、マッチング対象の文字列、オプションなどを保存することができます。頻繁に利用する正規表現のパターンは、プロジェクトファイルに保存しておくと便利でしょう。
RegexDesigner.NETは次の3つのテキストボックスから構成されています。
- 「パターン文字列」に正規表現のパターンを入力します。
- 「マッチング対象の文字列」にチェックしたいテキストを入力します。
- 「マッチング結果」に判定結果が表示されます。
ツールバーの[Match Text]ボタンをクリックすると、1.と2.の内容に応じた結果が3.に色付きで表示されます。ここではabc
というパターンが3回マッチするため、青色と赤色の交互に表示されることが分かります。画面の左下に「3 Matches」と表示されていることも確認しておいてください。
パターンとは
正規表現では、特定の文字の組み合わせを表現するためにパターンという文字列を利用します。ここではabc
という文字列を入力しています。詳細は後述しますが、例えば、拡張子がtxtのファイルを表す場合は「.+\.txt
」、郵便番号の場合は「^\d{3}-\d{4}$
」というようなパターンを利用します。
マッチングとは
正規表現で、パターンに合致するかどうかをチェックすることをマッチングと呼びます。パターンに合致した場合は「マッチする」と呼び、合致しない場合は、「マッチしない」と呼びます。
RegexDesigner.NETを閉じる
画面の確認ができたら、RegexDesigner.NETのウィンドウを閉じてください。文字列や設定を変更しているときは保存するかを確認するダイアログが表示されますので、保存したい場合は[はい]を選択してください。
この後の例でも、1.にパターンを入力し、2.にテスト対象のデータを入力するといった要領で正規表現を試していきます。
例2:名前がabc.txtのファイル ~任意の1文字「.」、エスケープ「\」~
例2では、ファイル名が「abc.txt」かどうかをチェックします。
それでは、プロジェクトファイルの「02_ファイル名abc.txtのファイル.rep」を開いてください。例1と同様に[Match Text]をクリックします。すると、名前が「abc.txt」のファイルだけではなく、「abcd.txt」や「abc-txt」といった名前もマッチしてしまっていることが分かります。
この原因はパターン文字列にメタキャラクタが含まれているためです。
メタキャラクタとは
正規表現のパターンにおいて、特別な意味を持つ文字のことをメタキャラクタ(メタ文字)と呼びます。コマンドプロンプトで使用できる「*」や「?」のようなものですが、.NETの正規表現では、次の文字がメタキャラクタとして扱われます。
記号 | 意味 |
. |
任意の1文字 |
* |
ゼロ回以上の繰り返し |
+ |
1回以上の繰り返し |
? |
ゼロ回または1回 |
{ } |
任意の回数の繰り返し |
^ | 文字列の先頭 |
$ |
文字列の末尾 |
[ ] |
範囲の指定 |
( ) |
グループ化 |
| |
または |
正規表現を理解する上でメタキャラクタは非常に重要ですので、これらの記号には注意してください。ここでは特に、ピリオド「.
」が任意の1文字であることを理解しておいてください。
エスケープ文字とは
それでは、メタキャラクタを普通の文字として扱う場合はどうすれば良いのでしょうか。この場合にはエスケープ文字の「\
」という記号を利用します。つまり、エスケープ文字をメタキャラクタの前で使うと、メタキャラクタの特別な意味を除外し、本来の文字にすることができます。
記号 | 説明 |
\メタキャラクタ |
メタキャラクタを文字として扱う(\. など) |
\t |
タブ |
\r |
キャリッジリターン |
\n |
改行文字 |
また、エスケープ文字と特定の文字を組み合わせて、「\t
」がタブ、「\n
」が改行というように特別な意味を表すことができます。
エスケープに関する記号についての詳細は、こちらのページを参考にすると良いでしょう。
ファイル名abc.txtの場合のチェック
RegexDesigner.NETでファイル名が「abc.txt」にマッチングする例に戻りましょう。
パターン文字列の「abc.txt
」は一見正しいように見えますが、正規表現ではピリオド「.」が任意の一文字という特別な意味を持つため、正しくマッチングしていません。そのためエスケープ文字を使って「abc\.txt
」に変更します。
[Match Text]をクリックすると、正しく「abc.txt」だけが選択されていることが分かります。