時間がない中で急に修正依頼が来た。対応したいけれど、どのくらいのボリュームがあるか把握するのも大変……

まさに、このような「作業時間が間に合いそうにない!」という時に、皆さんはどのように対処していますか。

対応方法は色々ありますが、効率よく、ミスのない方法で進めたい方にオススメなのが「正規表現」です。利用することで作業を効率化することができる便利なものですが、耳にしたことはあるけれど「使い方がわからない」「難しそう」と感じている方も多いのではないでしょうか。

そこで今回は、否定の表現を中心に正規表現の利用方法を簡単にご紹介します。

一通りご覧いただければ、正規表現を利用できるようになります。興味のある方はぜひ記事を参考にしていただき、早速活用してみてください。
  

正規表現とは

正規表現(Regular Expression)とは、特定の文字列をパターン化して記号で表現する手法のことで、テキストエディタ、プログラミング言語などを扱う際に利用できます。

通常の文字 (a~zなど) に加えて、メタキャラクタと呼ばれる特殊な記号を用意しており、これらを組み合わせることで文字列を指定することが可能です。メタキャラクタの例を挙げると、「+」……直前の文字の1回以上の繰り返し、「.」……任意の1文字、などがあります。

正規表現は、例えば「文字列の中で特定の文字列を検索・置換したい時」や「ある文字列が何行目にあるか検索したい時」などに活躍します。

参考:
便利な正規表現 | Shinta's Site
  

特定の文字を含まない記述

正規表現には「文字クラス」という、ある文字列が含まれるとマッチングするという記法があり、これを使うことで”特定の文字を含まない”表現をすることができます。必要な部分だけを抜き出したい、〜ではない部分を探したい、というケースで多用する条件ですので、覚えておいて損はありません。

文字クラスの否定を表すには、「^(キャレット、カレット)」を使います。

参考:
正規表現:文字やパターンを「含まない」、否定の表現まとめ | WWWクリエイターズ
  

例1. 特定のアルファベットではない文字

文字クラス(character class)内 [ ] でマイナスハイフン「-」を使うと、範囲を指定することができます。例えば、[a-z]ならば「小文字のa〜zまで」、[A-C]なら「A〜Cまで」を表します。

ここに「^(キャレット、カレット、caret)」を使うと、特定のアルファベットではない1文字を表現することができます。[^マッチさせたくない文字]という形で、「^(キャレット、カレット)」以降にマッチさせたくない文字列を記述します。

● 例:

[^a-z] → 「小文字のa〜zまで」以外の1文字にマッチする
[^A-C] →  「A〜Cまで」以外の1文字にマッチする

  

例2. スペース以外の文字

上記では、ある特定アルファベットではない文字をマッチさせたい場合の例をご紹介しました。

では、スペース以外の文字を表現したい場合にはどうすればいいでしょうか。この場合「^(キャレット、カレット)」に加えて、量指定子を使うことでスペース以外の文字をマッチすることが可能です。正規表現においては、+や*といった記号を量指定子といい、マッチする回数が異なります。

それぞれの記号の意味は以下のとおりです。

● 正規表現の量指定子

 * → 0回以上の繰り返しにマッチする
+  → 1回以上の繰り返しにマッチする
{a} →  a回の繰り返しにマッチする
{a,} →  a回以上の繰り返しにマッチする
{a,b} → a回以上b回以下の繰り返しにマッチする
?  → 0回または1回の出現にマッチする

例:
[^ ]+ → 全角スペースを含まない文字列
[^ ]+ → 半角スペースを含まない文字列
[^ | ]+ → 全角もしくは半角化のスペースを含まない文字列

  

例3. 空白文字を含まない表現

正規表現における空白文字とは「半角スペース・タブ文字・改行・改ページ」のことです。「\s」は空白文字(半角スペース・タブ文字・改行・改ページ全て)、「\S」は非空白文字(空白文字ではない)を表します。ここで注意すべきなのが、空白文字「\s」に全角スペースは含まれないことです。

例として、以下のような使い方ができます。

● 例:

\S+ → 空白以外の文字にマッチする

※ちなみに、「(\s| )」のように記述すると、空白文字と全角スペースにマッチさせることができます。