記事では、正規表現の.*、.*?、.+? の意味について説明しています。この記事は非常に詳細であり、学習や仕事において参考になる価値があります。必要な方は参考にしてください。
1. .*
.
は改行文字 \n 以外の任意の 1 文字にマッチすることを意味し、*
は 0 回以上の繰り返しを表します。したがって、.*
は任意の文字が 0 回以上繰り返されることを表します。?
がない場合、これは貪欲なマッチングを意味します。例えば、a.*b
は、a で始まり b で終わる最も長い文字列にマッチします。aabab
を検索する場合、aabab
全体にマッチします。これは貪欲マッチングと呼ばれます。
また、パターンsrc=.*
は、最も長い src=` で始まり、` で終わる最も長い文字列にマッチします。<img src=``test.jpg` width=`60px` height=`80px`/> を検索する場合、src=``test.jpg` width=`60px` height=`80px` が返されます。
2. .*?
?
は * または + の後に使用される場合、非貪欲モードを意味します。これは最小限の繰り返しでマッチングすることを意味します。つまり、可能な限り少ない文字にマッチしますが、マッチ全体が成功するために最小限の繰り返しを使用します。
a.*?b
は、a で始まり b で終わる最も短い文字列にマッチします。aabab
に適用すると、aab
(1 文字目から 3 文字目)とab
(4 文字目から 5 文字目)にマッチします。
また、パターン src=`.*?`は、最も短い src=` で始まり ` で終わる文字列にマッチします。` と ` の間に文字がなくても構いません。なぜなら、* は 0 回以上の繰り返しを意味するからです。<img src=``test.jpg` width=`60px` height=`80px`/> を検索する場合、src=`` が返されます。
3. .+?
上記と同様に、?
は * または + の後に使用される場合、非貪欲モードを意味します。これは最小限の繰り返しでマッチングすることを意味します。
a.+?b
は、a で始まり b で終わる最も短い文字列にマッチしますが、a と b の間には少なくとも 1 つの文字が必要です。ababccaab
に適用すると、abab
(1 文字目から 4 文字目)とaab
(7 文字目から 9 文字目)にマッチします。注意してください、この場合、マッチ結果はab
、ab
、aab
ではありません。なぜなら、a と b の間には少なくとも 1 つの文字が必要だからです。
また、パターン src=`.+?`は、最も短い src=` で始まり ` で終わる文字列にマッチします。+ は 1 回以上の繰り返しを意味するため、開始と終了の間には必ず文字が必要です。<img src=``test.jpg` width=`60px` height=`80px`/> を検索する場合、src=``test.jpg` が返されます。.*?
との違いに注意してください、この場合は **src=``** にはマッチしません。なぜなら、src=` と ` の間には少なくとも 1 つの文字が必要だからです。