Dot-Net
{n}怎麼做?和 a{n} 不同?
我試圖理解以下正則表達式量詞(a在這裡只是一個範例性標記):
a{n}?問號如何影響上述表達式的匹配?它與以下有何不同?
a{n}例如,我希望該模式與
aa{1}?a兩者都匹配。雖然匹配,但不是匹配。該模式確實匹配兩者,因此括號在這裡確實有所作為。aaa``aa``aaa``aa``a(a{1})?a注意:msdn 文章Quantifiers in Regular Expressions說明了這兩種情況:
{n} 量詞恰好匹配前面的元素 n 次,其中 n 是任何整數。
對於
{n}?,它添加了以下不太有用的部分:它是貪婪量詞 {n}+ 的惰性對應物。
沒什麼。文章指出:
{n}量詞恰好匹配前面的元素n次,其中n是任何整數。{ n }是一個貪心量詞,它的惰性等價物是{ n }?.
…
{n}?量詞精確匹配前面的元素n次,其中n是任何整數。它是貪婪量詞**{ n }+**的惰性對應物。
請注意,文本完全相同。基本上,添加**?** 不會改變數詞的行為。.NET 的正則表達式引擎似乎支持
{n}?作為 .NET 的替代方案{n}。有趣的是,這篇文章似乎確實包含一個錯誤:
{ n ,}量詞至少匹配前面的元素n次,其中n是任何整數。{ n, }是一個貪心量詞,它的惰性等價物是{ n }?.
這是錯誤的。
{n,}is的惰性等價{n,}?物與{n}?.更新:文章的較新版本已更正此錯誤。