(?<=...)ブロックの後ろに式があり、肯定後読みのパターンにマッチし、さらに後に続く式にもマッチした場合に肯定後読みブロック以降部分がマッチと判定されます。パターン一致の条件として式に記述したいが、一致文字列や範囲に含めたくない場合の正規表現式を紹介します。
正規表現でパターンに一致した際に、パターンの中の一部のパターン部分を一致文字列としたい場合があります。
この場合は「肯定先読み」を利用すると実装できます。
(?=パターン)
?= を記述します。
通常は、ブロックの前に式がおかれるため、次の形式となります。
パターン(?=パターン)
(?<=...)ブロックの後ろに式があり、肯定後読みのパターンにマッチし、さらに後に続く式にもマッチした場合に肯定後読みブロック以降部分がマッチと判定されます。(?=パターン)
Wikipedia の文字列にマッチさせたいですが、マッチさせる範囲は、Wiki 部分のみとしたいです。
この場合の正規表現式は次の通りです。
Wiki(?=pedia)
置換文字列を"Web"とした場合、次の結果になります。
Wikipediaの文字列にマッチした場合でも、マッチの範囲は Wiki 部分になり、WikiがWebに置換されていることが確認できます。
| 文字列 | マッチするか | 置換後の文字列 |
|---|---|---|
| WikiWiki | × | WikiWiki |
| Wiki | × | Wiki |
| Wiiiki | × | Wiiiki |
| Wikipedia | 〇 | Webpedia |
| BigWikipedia2 | 〇 | BigWebpedia2 |
| Wikipepe | × | Wikipepe |
| OhWikipedia!! | × | OhWebpedia!! |
| ArohaWikipen | × | ArohaWikipen |
ponta の文字列にマッチさせたいですが、マッチさせる範囲は、pon 部分のみとしたいです。
この場合の正規表現式は次の通りです。
pon(?=ta)
置換文字列を"OK"とした場合、次の結果になります。
pontaの文字列にマッチした場合でも、マッチの範囲は pon 部分になります。
| 文字列 | マッチするか | 置換後の文字列 |
|---|---|---|
| penta | × | penta |
| ponta | 〇 | OKta |
| pnta | × | pnta |
| printa | × | printa |
| poronta | × | poronta |
| zponta | 〇 | zOKta |
| 3ponta!! | 〇 | 3OKta |
| anapontap | × | anaOKtap |
| petita | × | petita |
| ota | × | ota |