SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

RegexDesigner.NETを使って.NETでの正規表現をマスターする

正規表現を使って効率的なテキスト処理を行う


  • X ポスト
  • このエントリーをはてなブックマークに追加

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は外国では人気のあるツールですので、正規表現を使う機会が多い方や、正規表現をマスターしたい方はインストールしてみてはいかがでしょうか。

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つのテキストボックスから構成されています。

RegexDesigner.NETの画面構成(例1)
RegexDesigner.NETの画面構成(例1)
  1. 「パターン文字列」に正規表現のパターンを入力します。
  2. 「マッチング対象の文字列」にチェックしたいテキストを入力します。
  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」といった名前もマッチしてしまっていることが分かります。

例2-1
例2-1

 この原因はパターン文字列にメタキャラクタが含まれているためです。

メタキャラクタとは

 正規表現のパターンにおいて、特別な意味を持つ文字のことをメタキャラクタ(メタ文字)と呼びます。コマンドプロンプトで使用できる「*」や「?」のようなものですが、.NETの正規表現では、次の文字がメタキャラクタとして扱われます。

基本的なメタキャラクタ
記号 意味
. 任意の1文字
* ゼロ回以上の繰り返し
+ 1回以上の繰り返し
? ゼロ回または1回
{ } 任意の回数の繰り返し
^ 文字列の先頭
$ 文字列の末尾
[ ] 範囲の指定
( ) グループ化
| または

 正規表現を理解する上でメタキャラクタは非常に重要ですので、これらの記号には注意してください。ここでは特に、ピリオド「.」が任意の1文字であることを理解しておいてください。

エスケープ文字とは

 それでは、メタキャラクタを普通の文字として扱う場合はどうすれば良いのでしょうか。この場合にはエスケープ文字の「\」という記号を利用します。つまり、エスケープ文字をメタキャラクタの前で使うと、メタキャラクタの特別な意味を除外し、本来の文字にすることができます。

エスケープに関する記号
記号 説明
\メタキャラクタ メタキャラクタを文字として扱う(\.など)
\t タブ
\r キャリッジリターン
\n 改行文字

 また、エスケープ文字と特定の文字を組み合わせて、「\t」がタブ、「\n」が改行というように特別な意味を表すことができます。

 エスケープに関する記号についての詳細は、こちらのページを参考にすると良いでしょう。

ファイル名abc.txtの場合のチェック

 RegexDesigner.NETでファイル名が「abc.txt」にマッチングする例に戻りましょう。

 パターン文字列の「abc.txt」は一見正しいように見えますが、正規表現ではピリオド「.」が任意の一文字という特別な意味を持つため、正しくマッチングしていません。そのためエスケープ文字を使って「abc\.txt」に変更します。

例2-2
例2-2

 [Match Text]をクリックすると、正しく「abc.txt」だけが選択されていることが分かります。

次のページ
例3:拡張子がtxtのファイル ~繰り返し「*」「+」「?」~

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/415 2011/05/22 00:38

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング