正規表現を使って「〜以外」をマッチさせてみる
  • facebookページ
  • twitterページ
  • 2018.03.12

    正規表現を使って「〜以外」をマッチさせてみる

    正規表現は、文字・文字列のパターンを表現するものです。これをプログラミング時に使用することで、欲しい文字列を検索する時に強力な方法として採用されています。今回は、マッチ(検索)させることに対して否定の要素を加え、マッチするものを除外する方法を紹介します。

    特定の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という文字列は含まない行を検索します。

    まとめ

    正規表現は、「何かにマッチする」「あてはまる」「含む」ようなイメージを持ってしまう人も多いのですが、それを逆手に取って「除外」する方向でマッチさせる方が、すっきりした書き方・表現になることもあります。最初は慣れるのに時間がかかるかもしれませんが、「マッチする表現」から「除外する」を導く書き方を想像できるようになると、効率的で分かりやすくなることも多いので、少しずつ試してみましょう。