(?=...)ブロックの前に式があり、パターンにマッチし、後に続く肯定先読みの式にもマッチした場合に肯定先読みブロック以前部分がマッチと判定されます。パターン一致の条件には含めたいが、一致した結果には含めたくない場合の正規表現式を紹介します。
正規表現でパターンにマッチさせた際に、パターンの中の一部のパターン部分に対してマッチさせたい場合があります。
この場合は「肯定後読み」を利用すると実装できます。
(?<=パターン)
?<= を記述します。
通常は、ブロックの後に式がおかれるため、次の形式となります。
(?<=パターン)パターン
(?=...)ブロックの前に式があり、パターンにマッチし、後に続く肯定先読みの式にもマッチした場合に肯定先読みブロック以前部分がマッチと判定されます。PenguinJump にマッチしますが、マッチする範囲はJump部分のみとしたいです。
この場合の正規表現式は次の通りです。
(?<=Penguin)Jump
置換文字列を"Dive"とした場合、次の結果になります。
PenguinJumpの文字列にマッチした場合でも、マッチの範囲は Jump 部分になり、JumpがDiveに置換されていることが確認できます。
| 文字列 | マッチするか | 置換後の文字列 |
|---|---|---|
| PenguinHop | × | PenguinHop |
| PenguinStep | × | PenguinStep |
| PenguinJump | 〇 | PenguinDive |
| DuckJump | × | DuckJump |
| OwlJump | × | OwlJump |
| GrayPenguinJumpJump | 〇 | GrayPenguinDiveJump |
| WhitePenguinHop!! | × | WhitePenguinHop!! |