首頁 >後端開發 >C++ >為什麼在C#REGEX中匹配的數字匹配的效率不如\ d`效率'?

為什麼在C#REGEX中匹配的數字匹配的效率不如\ d`效率'?

Barbara Streisand
Barbara Streisand原創
2025-01-31 18:26:09942瀏覽

Why is `d` Less Efficient Than `[0-9]` for Digit Matching in C# Regex?

C#正則表達式中d效率低於[0-9]的原因

最近的性能測試表明,在C#正則表達式引擎中,用於匹配數字的d的效率出人意料地低於[0-9][0123456789]字符集。這一發現引發了兩個問題:

1. 為什麼範圍[0-9]比集合[0123456789]效率更高?

人們可能會認為範圍的實現效率更高,因為它涵蓋了特定且狹窄的字符範圍,而集合則明確列出了所有十個數字。然而,測試結果表明,這兩種方法之間的性能差異最小。

2. 為什麼d的效率低於[0-9]

測試發現d的效率明顯低於[0-9]。這尤其令人費解,因為d通常被認為是[0-9]的簡寫。進一步調查揭示了一個根本區別:

d匹配Unicode數字,[0-9]匹配ASCII數字

與只匹配ASCII數字(0-9)的[0-9]不同,d匹配所有Unicode數字。這包括來自其他語言和字符集的字符,例如波斯數字(۱۲۳۴۵۶۷۸۹)和德瓦那加里數字(०१२३४५६७८९)。為了證明這一點,以下代碼生成一個包含所有Unicode數字的字符串:

<code class="language-csharp">var sb = new StringBuilder();
for (UInt16 i = 0; i < 0x10FFFF; i++)
{
    if (char.IsDigit((char)i))
    {
        sb.Append((char)i);
    }
}
string unicodeDigits = sb.ToString();</code>

生成的字符串顯示了d識別為數字的各種字符,包括來自阿拉伯語、泰語、高棉語和其他文字的字符。

性能影響

檢查更廣泛的字符範圍(Unicode數字與ASCII數字)解釋了d[0-9]之間的性能差異。在只需要匹配ASCII數字的情況下,使用[0-9]將比d產生更好的性能。

以上是為什麼在C#REGEX中匹配的數字匹配的效率不如\ d`效率'?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn