日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2014年4月29日火曜日

正規表現を駆使すると開発諸々非常に捗る!

はじめに

テキストエディタの検索と置換機能は、プログラム開発において必要不可欠な機能だと思います。

固定的な文字列とのマッチングをチェックする検索と置換機能でもとても便利な機能ですが、一部のテキストエディタには、検索文字列として正規表現を使えるものがあります!(*1)



*1
Windows に標準で入っているメモ帳やワードパッドでは正規表現が使えません。
私が知っているものでは、秀丸エディタやVisual Studio、Eclipseでは正規表現が使えます。他にもいろいろなテキストエディタで正規表現が使えます。


Visual Studio 2010 で正規表現による検索を行う

正規表現の利点

正規表現が使えると何が嬉しいかというと、固定的な文字列の検索では複数回検索文字列を変えて検索作業をしなければならなかったものが、正規表現を使用すると一つの正規表現を含む検索文字列で済むことが多いです。

例1)HTML文書からタグを検索する

例えば、HTML文書からタグを検索することを考えます。

固定的なテキストによる検索

固定的なテキストによる検索では、

検索1回目の検索文字列:<html>
検索2回目の検索文字列:<head>
検索3回目の検索文字列:<body>
 ・
 ・
 ・

という風に複数回検索文字列を変更して、タグを探していくことになります。

正規表現による検索

ここで、正規表現を使用した場合、

検索文字列:\<[^\>]*\>

を検索文字列に指定するだけで、すべてのタグにマッチさせることができます!
この正規表現は、<で始まり、>以外の文字列が間に挟まり、>で終わる文字列を検索します。

例2)HTML文書を置換する

HTML文書のタグを置換することを考えます。
このケースでは、正規表現による強力なメリットを享受することができます。

例えば、<div>と</div>に囲まれた部分を<div>と</div>を含めて空行にすることを考えます。

置換前

<h1>見出し</h1>
<div>文字列</div>
<br />

置換後

<h1>見出し</h1>
<br />

固定的なテキストによる置換

固定的なテキストによる置換では、置換機能によって<div>と</div>に囲まれた部分を<div>と</div>を含めて空行にすることはできません。

正規表現による検索

ここで、正規表現を使用した場合、

検索文字列:\<div[^\>]*\>[^\<]*\</div[^\>]*\>\n
置換文字列:

にて置換を行うことで、<div>と</div>に囲まれた部分を<div>と</div>を含めて空行にすることができます。
この正規表現は以下のパターンが現れた場合に、文字列にマッチします。
  1. <divで始まる
  2. >以外の文字列が間に挟まる
  3. >が出現する
  4. <以外の文字列が間に挟まる
  5. </divで始まる
  6. >以外の文字列が間に挟まる
  7. >が出現する
  8. 改行が現れる

例3)HTML文書を置換する - その2 - 正規表現のタグを使用する

HTML文書のタグを置換することを考えます。
このケースでは、正規表現による更に強力なメリットを享受することができます。

例えば、<div>と</div>に囲まれた部分を削除し、<div>と</div>のみにすることを考えます。

置換前

<h1>見出し</h1>
<div>文字列</div>
<br />

置換後

<h1>見出し</h1>
<div></div>
<br />

固定的なテキストによる置換

固定的なテキストによる置換では、置換機能によって<div>と</div>に囲まれた部分を削除し、<div>と</div>のみにすることはできません。

正規表現による検索

ここで、正規表現を使用した場合、

検索文字列:{\<div[^\>]*\>}{[^\<]*}{\</div[^\>]*\>}
置換文字列:\1\3

にて置換を行うことで、<div>と</div>に囲まれた部分を削除し、<div>と</div>のみにすることができます。
この正規表現は以下のパターンが現れた場合に、文字列にマッチします。
  1. <divで始まる
  2. >以外の文字列が間に挟まる
  3. >が出現する
  4. <以外の文字列が間に挟まる
  5. </divで始まる
  6. >以外の文字列が間に挟まる
  7. >が出現する

検索文字列中に現れる{}は正規表現におけるタグ表現です。
{}で囲った部分を置換文字列に反映させることができます。

例えば、置換文字列に\1と記載した場合、検索文字列にて1番目に{}で指定した部分にマッチした文字列が置換後の文字列として使用されます。複数のタグを指定する場合、{}が前から何個目かを指定することで、任意のタグにマッチングした文字列にアクセスできます。
例:2版目のタグにアクセスする場合には、\2とする。


注意:

このタグ表現はテキストエディタによって表現方法が異なります。タグ{}と対応付ける正規表現\1の組み合わせは、Visual Studio 2010 における場合です。

Visual Studio 2012 からは、タグ{}と対応付ける正規表現\1の組み合わせに変わり、タグ()と対応付ける正規表現$1の組み合わせの組み合わせに変更されたようです。(*2)

*2
Visual Studio 2012における正規表現タグの変更 - emu雑記
http://emu717171.hatenablog.com/entry/2013/11/04/144213


各テキストエディタにおけるタグ表現は各ソフトウェアのヘルプなどを参照してください。


まとめ

正規表現を駆使して検索と置換を行うと、様々な作業の効率を大幅に向上できます!!

是非、いろいろな正規表現を使えるようにして、作業の効率化を進めていきましょう!!

参考文献

Visual Studio での正規表現の使用
http://msdn.microsoft.com/ja-jp/library/2k3te2cs.aspx

正規表現の構文
http://msdn.microsoft.com/ja-jp/library/vstudio/ae5bf541(v=vs.100).aspx






関連記事

関連記事を読み込み中...

同じラベルの記事を読み込み中...