正規表現は、文字・文字列のパターンを表現するものです。これをプログラミング時に使用することで、欲しい文字列を検索する時に強力な方法として採用されています。今回は、マッチ(検索)させることに対して否定の要素を加え、マッチするものを除外する方法を紹介します。
特定の1文字以外を含まない文字列の正規表現
[]
を使用すると、囲まれた文字にマッチさせることが出来ます。これに否定・除外の意味を持つ^
(キャレット)を使用することで、「指定した文字を含まない」表現が出来ます。
例)
^
[マッチする例]
B
C
D
特定のパターン以外の文字列の正規表現
指定した文字を含まない
この場合も、上記の[]
を使って書くことができます。
例)
[正規表現]
[^ABCDEF]
[マッチする例]
G
HIJ
指定した文字列を含まない1行を検索する
^(?!.*文字列).+$
上記の文字列の箇所に指定した文字(文字列)を含まない1行を検索出来ます。
例)
^(?!.*ABC).+$
「ABC」という文字列を含まない行を検索します。
指定した複数の文字列を含まない1行を検索する
^(?!.*(文字列|文字列)).+$
文字列を|(パイプ)で繋げることで、複数の文字列を除外することが出来ます。
例)
^(?!.*(ABC|XYZ)).+$
「ABC」または、「XYZ」という文字列を含まない行を検索します。
指定した文字列から開始しない1行を検索する
^(?!文字列).+$
文字列の部分から開始しない行を検索することが出来ます。
例)
^(?!ABC).+$
「ABC」という文字列から始まらない行を検索します。
指定した文字列で終わらない1行を検索する
^(?!.*文字列$).+$
文字列で終了しない行を検索することが出来ます。
例)
^(?!.*ABC$).+$
「ABC」で終了しない行を検索します。
~は含むが、~は含まない1行を検索する
^(?!.*文字列1).*(?=文字列2).*$
文字列2は含むが、文字列1は含まない1行を検索することが出来ます。
例)
^(?!.*ABC).*(?=XYZ).*$
「XYZ」という文字列を含み、ABCという文字列は含まない行を検索します。
まとめ
正規表現は、「何かにマッチする」「あてはまる」「含む」ようなイメージを持ってしまう人も多いのですが、それを逆手に取って「除外」する方向でマッチさせる方が、すっきりした書き方・表現になることもあります。最初は慣れるのに時間がかかるかもしれませんが、「マッチする表現」から「除外する」を導く書き方を想像できるようになると、効率的で分かりやすくなることも多いので、少しずつ試してみましょう。