正規表現 先読み後読み

パターン一致の条件にしたいが、一致文字列に含めたくない正規表現式 (肯定先読みの利用)

パターン一致の条件として式に記述したいが、一致文字列や範囲に含めたくない場合の正規表現式を紹介します。

概要

正規表現でパターンに一致した際に、パターンの中の一部のパターン部分を一致文字列としたい場合があります。
この場合は「肯定先読み」を利用すると実装できます。

肯定先読みの書式

(?=パターン)

?= を記述します。

通常は、ブロックの前に式がおかれるため、次の形式となります。

パターン(?=パターン)


肯定後読みとの違い
肯定後読みは、(?<=...)ブロックの後ろに式があり、肯定後読みのパターンにマッチし、さらに後に続く式にもマッチした場合に肯定後読みブロック以降部分がマッチと判定されます。
(?=パターン)

例1

Wikipedia の文字列にマッチさせたいですが、マッチさせる範囲は、Wiki 部分のみとしたいです。 この場合の正規表現式は次の通りです。

Wiki(?=pedia)

実行結果

置換文字列を"Web"とした場合、次の結果になります。 Wikipediaの文字列にマッチした場合でも、マッチの範囲は Wiki 部分になり、WikiがWebに置換されていることが確認できます。

文字列マッチするか置換後の文字列
WikiWiki×WikiWiki
Wiki×Wiki
Wiiiki×Wiiiki
WikipediaWebpedia
BigWikipedia2BigWebpedia2
Wikipepe×Wikipepe
OhWikipedia!!×OhWebpedia!!
ArohaWikipen×ArohaWikipen

例2

ponta の文字列にマッチさせたいですが、マッチさせる範囲は、pon 部分のみとしたいです。 この場合の正規表現式は次の通りです。

pon(?=ta)

実行結果

実行結果

置換文字列を"OK"とした場合、次の結果になります。 pontaの文字列にマッチした場合でも、マッチの範囲は pon 部分になります。

文字列マッチするか置換後の文字列
penta×penta
pontaOKta
pnta×pnta
printa×printa
poronta×poronta
zpontazOKta
3ponta!!3OKta
anapontap×anaOKtap
petita×petita
ota×ota
AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2022-05-05
Copyright © 1995–2025 iPentec all rights reserverd.