久しぶりの寄稿のオミです。
今回は以前に「とある文字を含まないファイルの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>).)*$となる訳です。
正規表現はプログラミングでも使う場合がありますので、文字列操作を行う色々なシーンで活用できとても便利です。
それではまた次回お会いしましょう。