正規表現:前方一致・後方一致・部分一致(〜を含む)の表現

最終更新:2018-07-18 by Joe

正規表現における、前方一致(先頭一致)、また後方一致の表現方法です。

「前方一致」の正規表現

正規表現にける文の先頭を一致させる「前方一致」の表現です。

文の最初にマッチさせるためには、位置指定子(アンカー)の「^」を使って、行の先頭位置を指定することで実現できます。

前方一致の正規表現の例

// 先頭の「東京」に前方一致
^東京.*$

// マッチする文字列
東京
東京タワー
東京三丁目の夕日

「.(ドット)」は「(空白文字以外の)なんでもよい文字」、「*」は「直前のパターンの00回以上の繰り返し」ですので、文字列が後に続くことを意味しています。

特殊文字については、詳しく触れませんが、こちらをご覧くださいね:

また「.(ドット)」が改行コードを含むかどうかの取り扱いが、使用言語によって異なる場合がありますので、ご注意下さい。

「後方一致」の正規表現

同様に、後方一致の例です。考え方としては、前方一致と同じですが、こちらは行末アンカーの「$」を使って、行の末尾を指定します。

後方一致の正規表現例

// 末尾にある「ラーメン」に後方一致
.*ラーメン$

// マッチする文字列
みそラーメン
とんこつラーメン
今日も昨日もお昼はラーメン

「肯定先読み」を使った前方一致の表現

さて、こちらは、やや上級編ですが「肯定先読み」と呼ばれる表現を使っても同じような前方一致表現が可能です。

// 大谷に前方一致
^(?=大谷).*$

// マッチする文字列
大谷が打つ
大谷が投げる
大谷がまたホームラン

えっ?上記の前方一致と何が違うの?となりますが、違いは、「(?=」「)」のカッコ内に書かれたパターンです。肯定先読み、と呼ばれるこのパターン表現は、

  1. マッチ後、処理位置が戻る、
  2. マッチ文字列をキャプチャしない

という特徴があります。それって何が役に立つのか?については、下記の「部分一致」となる、「〜を含む文字列」を表現を見るとわかります。

「部分一致」の正規表現(〜を含む文字列)

最後に、前方一致、後方一致のいずれかとなる部分一致、すなわち「〜を含む」文字列とマッチさせます。

部分一致の正規表現

// 「リゾート」に部分一致
^(?=.*リゾート).*$

// マッチする文字列
リゾートに行きたい
星のリゾートに行きたい
夢にまでみた南国のリゾート

上記の肯定先読みのパターンは「・・・・・リゾート」にマッチを確認したあと、処理位置が文の先頭にもどります。その結果として、パターンの末尾にある「.*」が「・・・リゾート・・・・」という文字列全体をキャプチャしてくれるというわけです。これは肯定先読みならではの表現といえるでしょう。

「〜を含まない文字列」は話が長くなるので、こちらをお読み下さい。

前方一致・後方一致に関する参考情報

たまに利用する正規表現は、基本的なこともつい忘れがちです。こちらは、便利なチェックツールです。

以上です。