特定のパターンを含まない記述

先程ご紹介した文字クラスを利用する場合1文字単位での表現しかできませんでしたが、パターンを含まない文字列という形の表現も可能です。

ここからは、特定のパターンを含まない記述をご紹介します。

「文字列パターンの否定」を表現する「否定的先読み」では「?!」から始まる正規表現を「括弧 ( )」で囲むように記述することで、条件に合ったマッチングができます。

例:
?! ここに条件を記述する

範囲を指定するため「^」「$」で囲みます。
^ → 行頭を表す
$ → 行尾を表す

「abc」を含まない行にマッチ
例:^(?!.abc).$
「abc」もしくは「xyz」を含まない行にマッチ
例:^(?!.(abc|xyz)).$

それではさっそく「否定的先読み」の記述の具体例を見てみましょう。

参考:
正規表現:文字やパターンを「含まない」、否定の表現まとめ | WWWクリエイターズ
正規表現で文字列を含まない、否定の記述 | UX MILK
【正規表現】文字列の否定、ある文字列を含まない : nymemo
  

例1. 〜という文字列で始まらない

ある文字列で始まらない文字列にマッチしたいときの表現方法です。ここでは「今日の天気は晴れです。」という文章を例にして考えます。

例1:「天気は」で始まらない1行にマッチ
^(?!天気は).+$

「^」が行頭、「.」が改行以外の任意の1文字に一致しますので、例のケースでは「天気は」ではない行頭、改行以外の任意文字の1回以上の連続に一致します。

例2:「天気は」で始まらない文字列にマッチ
(?!天気).+$

例1と似ていますが、例2には行頭「^」がなく”行頭のすぐ後”という条件がないため「晴れです。」にマッチします。
  

例2. 〜という文字列を含まない

例1のケースでは開始位置を指定しましたが、次は単に「〜という文字列を含まない」場合の表現方法をご紹介します。

例:「晴れ」を含まない文字列
^(?!.晴れ).$

量指定子「 *」は、0回以上の繰り返しにマッチする記号です。上記のように記述することにより、「晴れ」を含まない文字列といった表現ができます。
  

まとめ

以上、知っておきたい!利用できる文字列の正規表現をご紹介しました。いかがでしたでしょうか。

きっと正規表現を今まで使ったことがない方でも、理解が深まったはずです。

業務を進めるにあたり必ず出くわす可能性がある「修正」ですが、該当箇所が多く作業が膨大な場合、1つひとつ人力で修正するのは作業時間がかかり大変です。また、時間の問題だけではなく、手作業という性質上どうしてもミスのリスクがあります。

そこで活用したいのが「正規表現」です。正規表現を作業に取り入れることで、単純作業に使う時間を省くことができ、時間をかけるべき作業に注力できるようになります。また、検索を行うことで該当箇所のボリュームがどのくらいあるのかを把握することも可能です。

もちろん、修正以外にも様々なシーンで役に立ちます。記号を使うこともあり、非エンジニアの方の場合難解なイメージを持ってしまいがちですが、少しずつ利用していけば徐々に慣れてくるのではないでしょうか。

色々な応用方法がありますので、業務効率をアップしたい方はぜひ取り入れてみてください。