SHOEISHA iD

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

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

特集記事

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

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


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

例6:郵便番号(行頭・行末) ~先頭「^」、末尾「$」~

 例6では、位置を表すメタキャラクタについて説明していきます。

 「06_郵便番号(行頭・行末).rep」を開き、[Match Text]をクリックしてください。

例6-1
例6-1

 実は、例5のパターン文字列「\d{3}-\d{4}」では、1234-56789でも234-5678がマッチしてしまいます。そこで、ここでは郵便番号が完全に一致したときだけマッチするように変更します。そのためには、数字を3回繰り返す前に先頭があり、ハイフンの後、数字を4回繰り返した後で末尾があるという定義をします。

位置をあらわす「^」「$」

 位置を表すメタキャラクタとして、先頭には「^」を、末尾には「$」を指定できるため、「^\d{3}-\d{4}$」という定義に変更します。

例6-2
例6-2

 これによって、1234-56789ではマッチしなくなり、完全な999-9999という形式にのみマッチするようになりました。位置に関する記号を次にまとめます。

位置に関する記号
記号 説明 備考
^ 文字列の先頭で一致 Multilineオプション時は行頭
\A 文字列の先頭で一致  
$ 文字列の末尾で一致 Multilineオプション時は行末
\Z 文字列の末尾で一致  

 詳細についてはこちらのページで確認するようにしてください。

 なお、例5で説明したように、^というメタキャラクタは、範囲を表す[ ]の中では、(先頭ではなく)否定の意味になりますので注意してください。

例7:電話番号を置換 ~置換~

 例7では、電話番号を用いて、正規表現による置換の例を説明していきます。

 引き続き、「07_電話番号を置換.rep」を開いて、[Match Text]ボタンの隣にある[Replace Text]ボタンをクリックしてください。ここでは、電話番号の区切り文字をハイフン「-」から括弧「( )」へ置換しています。

例7-1
例7-1

 置換をするには、抽出する文字列のグループ化と、置換後のパターンを指定します。

抽出する文字列のグループ化

 抽出する文字列をグループ化をするには括弧で囲みます。

 ここでは「(0\d{1,4})-(\d{1,4})-(\d{4})」というパターンで、市外局番(0から始まる2桁~5桁の数字)、地域(1桁~4桁の数字)、番号(4桁の数字)の3つのグループを抽出します。

置換パターンの指定「$n」

 さらに、置換のパターンを[ReplacementString]タブのテキストボックスに記述します。$nは置換のパターンを指定するときにだけ利用できるメタキャラクタです。ここでは、「$1($2)$3」と記述することによって、抽出された順に$1$2$3に代入されます。つまり、この例では、$1に市外局番、$2に地域、$3に番号が代入されます。なお置換パターンでは、()のようなメタキャラクタは普通の文字として扱われます。

 もし、予想したとおりに置換されない場合には、結果にカーソルをあてて、グループの内訳をポップアップ表示させると良いでしょう。

例8:電話番号を置換(名前付き) ~グループ名の利用~

 例8では、例7と同様に電話番号のハイフンを括弧へ置換してみます。

 「08_電話番号を置換(名前付き).rep」を開き、[Replace Text]をクリックしてください。置換の方法は例7と同じですが、ここではグループ名を使っています。

例8-1
例8-1

抽出する文字列にグループ名をつける「(?<name> )」

 置換やプログラムでの抽出をしやすいようにグループに名前をつけることができます。グループに名前をつけるには、(?<名前> )という形式で指定します。ここでは、「(?<市外>0\d{1,4})-(?<地域>\d{1,4})-(?<番号>\d{4})」というパターンによって、「市外」「地域」「番号」といったグループ名をつけています。

置換パターンの指定「${name}」

 グループ名を指定することで、置換する文字列を「$1($2)$3」というような番号ではなく、「${市外}(${地域})${番号}」というような名前で指定できるようになります。

 グループ化、および、置換に関する記号について次にまとめます。

グループ化に関する記号
記号 説明 備考
( ) グループ化 1から始まる番号でキャプチャされる。0番目は正規表現パターン全体のテキスト
(?<name> ) 名前をつけてグループ化 (?'name' )のように一重引用符を利用することも可能
(?: ) グループ化(キャプチャしない) 
置換に関する記号
記号 説明
$n グループ番号nと一致した文字列に置換
${ name } (?<name> ) グループと一致した文字列に置換

 グループ化に関する記号の詳細はこちらから、置換に関する記号の詳細はこちらのページで確認すると良いでしょう。

例9:メールアドレスを分割 ~分割~

 例9では、正規表現を用いた文字列の分割について紹介します。

 「09_メールアドレスを分割.rep」を開き、[Match Text]ボタンの隣にある[Split Text]ボタンをクリックします。

例9-1
例9-1

正規表現による分割「Split」

 正規表現の分割(Split)命令は、StringSplitメソッドのように文字列を特定の文字で区切って配列に格納することができます。ただし、String.Splitが特定の文字で文字列を分割するのに対して、Regex.Splitでは正規表現によって文字列を分割する違いがあります。

 ここでは、カンマ、スペース、セミコロンをセパレータとして、メールアドレスを分割しています。パターン文字列に「,|\s|;」が設定されていることを確認してください。

次のページ
例10:.NETでの正規表現プログラミング

修正履歴

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

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

もっと読む

この記事の著者

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編 」他、著書多数

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング