株式会社コスモソニックツーワンの情報発信ブログです。

正規表現の解説

久しぶりの寄稿のオミです。

 

今回は以前に「とある文字を含まないファイルのGrep検索 for サクラエディタ」で説明時に登場した正規表現について解説したいと思います。

 

まず正規表現とは何なのかですが、複数の文字列を特定のパターンを用いて表現することを正規表現と呼びます。この正規表現で表される文字列パターンに合致する文字列をパターンマッチと言います。

 

このパターンの表現方法はソフトウェアによって様々ですが、今回はサクラエディタでの正規表現の書き方で解説いたします。

前回のブログで「<br>」を含まれない行の抽出時に ^((?!<br>).)*$ と入力してパターンマッチを行いましたが、ここで使われている正規表現のパターンは以下のようになります。

 

まず使用されている文字で「^」、「?」、「!」、「(」、「)」、「.」、「*」、「$」といった文字はメタ文字と呼ばれ制御文字として扱われます。通常の文字列として扱いたい場合はメタ文字の前に「\」を付加してエスケープする必要があります。

 

文字列の最初の「^」と最後の「$」はそれぞれ行頭と行末を示す文字になります。

例)パターンマッチを^aaa$と入力して実行した場合

「aaa」の行はマッチングする。

「aaaa」の行はマッチングしない。

 

「*」は直前のパターンの0回以上の繰り返しを表します。0回以上なので出現しない場合も対象になります。

例)パターンマッチを^abc*$と入力して実行した場合

「ab」の行はマッチングする。

「abcc」の行はマッチングする。

「abcd」の行はマッチングしない。

 

「.」は改行を除く任意の1文字を表します。

例)パターンマッチを^aa.$ と入力して実行した場合

 「aaa」の行はマッチングする。

 「aa」の行はマッチングしない。

 「aaaa」の行はマッチングしない。

 

次に()で囲われている部分はグループとして扱われます。例えば(abc)*と記述した場合はabcの繰り返しを意味します。

例)パターンマッチを^(abc)*$ と入力して実行した場合

 「abcabc」の行はマッチングする。

 「abcccc」の行はマッチングしない。

 

最後に「(?!<br>)」の記述部分ですが、否定先読みと呼ばれる書き方で?!の後ろに記述したパターンと一致した場所の直前文字をマッチングの対象外とします。

例)パターンマッチを^(?!abc).*$ と入力して実行した場合

 「aaaabc」の行はマッチングする。

 「abcaaa」の行はマッチングしない。

 

以上のようなパターンを組み合わせて「<br>」を含まれない行を正規表現で表すと ^((?!<br>).)*$となる訳です。

 

正規表現はプログラミングでも使う場合がありますので、文字列操作を行う色々なシーンで活用できとても便利です。

 

それではまた次回お会いしましょう。