パターンマッチの条件には含めたいが、マッチ範囲に含めたくない場合の正規表現式を紹介します。
概要
正規表現でパターンにマッチさせた際に、パターンの中の一部のパターン部分に対してマッチさせたい場合があります。
この場合は「肯定先読み」を利用すると実装できます。
肯定先読みの書式
?=
を記述します。
通常は、ブロックの前に式がおかれるため、次の形式となります。
肯定後読みとの違い
肯定後読みは、(?<=...)
ブロックの後ろに式があり、肯定後読みのパターンにマッチし、さらに後に続く式にもマッチした場合に肯定後読みブロック以降部分がマッチと判定されます。
例1
Wikipedia
の文字列にマッチさせたいですが、マッチさせる範囲は、
Wiki
部分のみとしたいです。
この場合の正規表現式は次の通りです。
実行結果
置換文字列を"Web"とした場合、次の結果になります。
Wikipediaの文字列にマッチした場合でも、マッチの範囲は Wiki 部分になり、WikiがWebに置換されていることが確認できます。
文字列 | マッチするか | 置換後の文字列 |
WikiWiki | × | WikiWiki |
Wiki | × | Wiki |
Wiiiki | × | Wiiiki |
Wikipedia | 〇 | Webpedia |
BigWikipedia2 | 〇 | BigWebpedia2 |
Wikipepe | × | Wikipepe |
OhWikipedia!! | × | OhWebpedia!! |
ArohaWikipen | × | ArohaWikipen |
例2
ponta
の文字列にマッチさせたいですが、マッチさせる範囲は、
pon
部分のみとしたいです。
この場合の正規表現式は次の通りです。
実行結果
実行結果
置換文字列を"OK"とした場合、次の結果になります。
pontaの文字列にマッチした場合でも、マッチの範囲は pon 部分になります。
文字列 | マッチするか | 置換後の文字列 |
penta | × | penta |
ponta | 〇 | OKta |
pnta | × | pnta |
printa | × | printa |
poronta | × | poronta |
zponta | 〇 | zOKta |
3ponta!! | 〇 | 3OKta |
anapontap | × | anaOKtap |
petita | × | petita |
ota | × | ota |
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-08-19
作成日: 2022-05-05