SHOEISHA iD

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

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

特集記事

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

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


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

正規表現は便利で強力な反面、パターンとよばれる記号と文字列の組み合わせ方法を学習する必要があるため、最初は難しく感じることがあります。そこで、本稿では「RegexDesigner.NET」という正規表現のパターンを簡単にテストできるフリーウェアを使いながら、正規表現の基本的な例を紹介していきます。

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

はじめに

 正規表現(Regular Expression)とは、コマンドプロンプトのワイルドカードのように、テキストを解析して特定の処理をする機能です。正規表現は便利で強力な反面、パターンと呼ばれる記号と文字列の組み合わせ方法を学習する必要があるため、最初は難しく感じることがあります。そこで、本稿では「RegexDesigner.NET」という正規表現のパターンを簡単にテストできるフリーウェアを使いながら例を紹介していきます。

 正規表現は、Perl/Rubyといった言語や、Unix系のツールで利用するものと思われがちですが、.NETにおいても同様に高度な機能を使うことができますので、正規表現をマスターして高度なテキスト処理(マッチング、抽出、置換)を行ってみましょう。

対象読者

 Visual Studio(.NET)にて開発を行っていて、.NETの正規表現に興味がある方を対象としています。

ダウンロードファイルの概要

 ダウンロードファイルを解凍すると、「RegexDesigner.NET」のプロジェクトファイルが複数含まれています。このプロジェクトファイルを順に開いて、正規表現のパターンをテストしてみてください(RegexDesigner.NETの入手方法や使用方法については後述)。

 また、正規表現を利用したサンプルプログラムも添付しています。必要に応じてVisual Studioからソースコードを開いて確認してください。

サンプルプログラム
サンプルプログラム

必要な環境

 ダウンロードファイルに含まれる、RegexDesigner.NETのプロジェクトファイルはRegexDesigner.NETのバージョン1.1にて作成しています。

 サンプルプログラムはVisual Studio 2003にて作成しています。本文中はC#にて解説していますが、ダウンロードファイルはVisual Basic.NET版も用意しています。また、Visual C#(Visual Basic)2005 Express Editionでも動かすことができます(最初にプロジェクトをアップグレードするウィザードが表示されます)。

正規表現とは

 正規表現は、テキストを解析してマッチング、抽出、置換といった処理をすることができる機能です。コマンドプロンプトのワイルドカード(*.txt)や、SQLのLIKE句(LIKE 'A%')の高機能版とイメージすると分かりやすいでしょう。

正規表現でできること

 正規表現では、大きく次の3つの用途で利用することができます。

  • 特定の文字列と一致するかをチェックする
  • 特定の文字列を抽出・置換する
  • 特定の文字列で分割する

 例えば、入力された郵便番号が正しいかをチェックしたり、サーバーログから特定の条件のメッセージだけを抽出したりできます。プログラムを書いても同様の処理ができますが、正規表現を利用した方がプログラミングの量を減らせることが多いため、バグの軽減に役立ちます。

正規表現のコード例

 正規表現のメリットを理解するために、郵便番号をチェックするC#のコード例を見てみましょう。下のコードは、正規表現を使わずに郵便番号が「999-9999」形式になっているかをチェックしています。

郵便番号をチェック(正規表現を未使用の場合)
//チェックする郵便番号
string input = "123-4567";
//文字数をチェック
if (input.Length == 8)
{
    //文字列をcharの配列に
    char[] c = input.ToCharArray();
    //文字数回ループ
    for( int i = 0; i < 8; i++)
    {
        if (i == 3)
        {
            //4文字目はハイフンのはず
            if (c[i] != '-')
            {
                return;
            }
        }else{
            //それ以外は数字のはず
            if (! char.IsDigit(c[i]))
            {
                return;
            }
        }
    }
    MessageBox.Show("正しい郵便番号");
}

 それほど難しい処理をしているわけではありませんが、ループやif文が多いため、こういったフォーマットのチェックは思いのほか面倒です。続いて、正規表現を使ったコードを見てみましょう。

郵便番号をチェック(正規表現を使用した場合)
//正規表現のパターン
Regex regex = new Regex(@"^\d{3}-\d{4}$");
//郵便番号のチェック
if( regex.IsMatch("123-4567") )
{
    MessageBox.Show("正しい郵便番号");
}

 「^\d{3}-\d{4}$」という正規表現特有のパターン文字列がある以外には、難しいところはないと思います。このように正規表現を利用すれば、短いコード量でテキスト処理を容易にできるようになります。

 また、正規表現を使うと保守性もよくなります。もし郵便番号のフォーマットで「999」や「999-99」も正しいことに変更するとしても、パターン文字列を「^\d{3}(-(\d{4}|\d{2}))?$」に変更するだけで済みます。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
RegexDesigner.NETとは

修正履歴

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング