位置を指定するメタ文字3
前方参照と後方参照
正規表現は、便利な技法ですがプログラミング言語に比べると、とても単純な機能しか持ち合わせていません。そのため、「もし○○がAなら、XXを取り出せ」というような「条件付きの検索」が苦手であります。
しかしながら、これから紹介する前方参照と後方参照を使用すると、ある程度は条件付きの検索が可能となります。
AA(?=BB) |
---|
意味:前方参照 文字列AAを検索、ただし直後に文字列BBがあるもののみ |
前方参照は、目的の単語の前方(というよりも、直後、そのすぐ後といった方が分かりやすいでしょう)に特定の単語があるか無いかを指定することができます。
大谷大学 |
大谷高校 |
大谷中学 |
このような単語のリストがあるとします。
大谷(?=大学) |
---|
こう書くと、”大谷”という文字列、ただしその直後に”大学”という文字列がつくもののみを検索することができます。
【結果】 |
---|
大谷大学 |
大谷高校 |
大谷中学 |
AA(?!BB) |
---|
意味:前方参照の否定 文字列AAを検索、ただし直後に文字列BBが無いもののみ |
これは、前方参照の否定です。
大谷(?!大学) |
---|
このように書くと、先ほどとは逆に、直後に”大学”がつかない”大谷”のみを検索します。
【結果】 |
---|
大谷大学 |
大谷高校 |
大谷中学 |
この例では、単語が短く、単純なので前方参照の威力があまり発揮されておりませんが、利点としては、単純に"大谷大学"と検索すると、”大谷”だけを取り出したくとも、必ず余計な”大学”という文字列までマッチしてしまいます。
しかし、前方参照を使用すると、”大学”をのぞいた”大谷”のみを取り出すことが可能となります。
(?<=AA)BB |
---|
意味:後方参照 文字列BBを検索、ただし直前に文字列AAがあるもののみ |
後方参照は前方参照の逆で、対象の文字列の後ろ(直前、すぐ前)に特定の文字列が有るか無いかを指定して検索します。
和風料理 |
洋風料理 |
中華風料理 |
上のようなリストから、”料理”という文字列、ただし直前に”和風”という文字列があるもののみを検索するには、
(?<=和風)料理 |
---|
このように書きます。
【結果】 |
---|
和風料理 |
洋風料理 |
中華風料理 |
(?<!AA)BB |
---|
意味:後方参照の否定 文字列BBを検索、ただし直前に文字列AAが無いもののみ |
前方参照と同じように、後方参照にも否定形が存在します。
(?<!和風)料理 |
---|
このように書くと、直前に”和風”という文字列が無い”料理”を検索することができます。
【結果】 |
---|
和風料理 |
洋風料理 |
中華風料理 |