Dot-Net

{n}怎麼做?和 a{n} 不同?

  • January 31, 2022

我試圖理解以下正則表達式量詞(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}?.

更新:文章的較新版本已更正此錯誤。

引用自:https://stackoverflow.com/questions/18006093