NoEditorでのGREPの正規表現とメタ文字

noeditorでの検索・置換(一つのファイル内が対象)とGrepでの検索・置換(あるディレクトリ内の複数のファイルが対象)は、どちらも正規表現の扱いは同じです。

正規表現による検索・置換は、小迫清美氏の開発による正規表現ライブラリ「鬼車」を利用しています。

Grepとは、global regular expression printの頭文字です。指定フォルダ以下に存在するファイルの中から(global広範囲に)、正規表現(regular expression)を用いて検索した結果を表示(print)する、という意味です。

GREPの正規表現で複数ファイルに対して置換する使用例

NoEditorでGrepを起動した画面NoEditorで、検索タブ→Grepの起動→Grep & Replaceタブとすると、以下のような画面になります。

検索ディレクトリ検索文字列置換文字列の右の枠を入力し、正規表現にチェックを入れ、右の置換開始で、検索ディレクトリ下にある複数ファイルに対して置換が始まります。

ポップアップ ウィンドウには「この処理はやり直しができません」と表示されますが、元の状態に戻す事は、できます。

改行コード(\r\n)を使う置換・挿入

  1. <li><a href="AA.htm">GREP1</a></li>
  2. <li><a href="CC.htm">GREP3</a></li>

というソースコードを以下の様に変える。つまり2行目を挿入する。

  1. <li><a href="AA.htm">GREP1</a></li>
  2. <li><a href="BB.htm">GREP2</a></li>
  3. <li><a href="CC.htm">GREP3</a></li>

検索文字列に「<li><a href="AA.htm">GREP1</a></li>\r\n<li><a href="CC.htm">GREP3</a></li>」を入れ、
置換文字列に「<li><a href="AA.htm">GREP1</a></li>\r\n<li><a href="BB.htm">GREP2</a></li>\r\n<li><a href="CC.htm">GREP3</a></li>」入れます。

正規表現にチェックを入れて置換開始を行なえば、検索ディレクトリ内の複数ファイルに対して、2行目が挿入されます。

正規表現での改行コードには、\r\n、\n、\rがありますが、Windows系のOSでは\r\nです。

\を入力するキーボタンWindowsでは、\(バックスラッシュ)を入力するキーボタンは、右のいずれかです。

元の状態に戻す

上記の置換を元に戻すには、検索文字列と置換文字列を入れ替えて、再度、Grep & Replaceを行ないます。

ファイル名を変える

使用しているxxx.cssをyyy.cssに変えるには、正規表現にチェックを入れないで、単純に置換を行ないます。

grep1.pngとgrep2.pngとgrep3.pngをgrep.pngに変えるには、検索文字列に「grep[1-3]\.png」、置換文字列に「grep.png」を入れて、正規表現にチェックを入れ、置換を行ないます。

[1-3]は1~3のどれか、という正規表現です。\は次の.が正規表現のある1文字という効果を抑制する為のものです。

GREPの正規表現で使うメタ文字

正規表現で使うメタ文字の主なものは . (ピリオド)  ^   $   [ ]   *   +   ?   |   ( ) で、全て半角文字です。

^ | を入力するキーボタンは、普通、右上の方です。^ |を入力するキーボタン

メタ文字による検索の例

  • [海川湖]→海か川か湖]。[ ]の中は、1文字を複数集めたもの。(半角と全角は区別される)
  • 島|近畿|北海道→島か近畿か北海道。文字列を|で区切る。
  • [a-d]→aかbかcかd。aの文字コードからdの文字コードに該当するもの。現実的には、半角文字-半角文字ですが、全角文字を入れる事も可能。
  • alt="[^"]→alt=""以外。つまり、alt属性が空でないもの。^は以外という意味で、alt="の次が"以外という意味。
  • YYY*→YYYあ YYYあいなど。YYYは不一致。(0文字以上の任意の文字列)
  • YYY+→YYY YYYあ YYYあい など。(1文字以上の任意の文字列)

詳しくは正規表現サンプル集

メタ文字自体の検索

メタ文字の前に半角の\(バックスラッシュ)を付け加える。例、「.」を検索する場合は「\.」を検索する。

最後まで読んでいただいて、ありがとうございました。