トップ 正規表現とは 基本のメタ文字 練習問題

位置を指定するメタ文字3

前方参照と後方参照

 正規表現は、便利な技法ですがプログラミング言語に比べると、とても単純な機能しか持ち合わせていません。そのため、「もし○○がAなら、XXを取り出せ」というような「条件付きの検索」が苦手であります。

 しかしながら、これから紹介する前方参照と後方参照を使用すると、ある程度は条件付きの検索が可能となります。


AA(?=BB)
意味:前方参照   文字列AAを検索、ただし直後に文字列BBがあるもののみ

 前方参照は、目的の単語の前方(というよりも、直後、そのすぐ後といった方が分かりやすいでしょう)に特定の単語があるか無いかを指定することができます。

大谷大学
大谷高校
大谷中学

このような単語のリストがあるとします。

大谷(?=大学)

 こう書くと、”大谷”という文字列、ただしその直後に”大学”という文字列がつくもののみを検索することができます。

【結果】
大谷大学
大谷高校
大谷中学
  • 練習問題へ

  • AA(?!BB)
    意味:前方参照の否定   文字列AAを検索、ただし直後に文字列BBが無いもののみ

    これは、前方参照の否定です。

    大谷(?!大学)

    このように書くと、先ほどとは逆に、直後に”大学”がつかない”大谷”のみを検索します。

    【結果】
    大谷大学
    大谷高校
    大谷中学

     この例では、単語が短く、単純なので前方参照の威力があまり発揮されておりませんが、利点としては、単純に"大谷大学"と検索すると、”大谷”だけを取り出したくとも、必ず余計な”大学”という文字列までマッチしてしまいます。

     しかし、前方参照を使用すると、”大学”をのぞいた”大谷”のみを取り出すことが可能となります。


    (?<=AA)BB
    意味:後方参照   文字列BBを検索、ただし直前に文字列AAがあるもののみ

     後方参照は前方参照の逆で、対象の文字列の後ろ(直前、すぐ前)に特定の文字列が有るか無いかを指定して検索します。

    和風料理
    洋風料理
    中華風料理

     上のようなリストから、”料理”という文字列、ただし直前に”和風”という文字列があるもののみを検索するには、

    (?<=和風)料理

    このように書きます。

    【結果】
    和風料理
    洋風料理
    中華風料理

    (?<!AA)BB
    意味:後方参照の否定   文字列BBを検索、ただし直前に文字列AAが無いもののみ

     前方参照と同じように、後方参照にも否定形が存在します。

    (?<!和風)料理

    このように書くと、直前に”和風”という文字列が無い”料理”を検索することができます。

    【結果】
    和風料理
    洋風料理
    中華風料理

    ページの一番上へ トップへ戻る