ホームページ >バックエンド開発 >C++ >なぜ `\ d`はc#regexで` [0-9] `よりも効率が低いのですか?

なぜ `\ d`はc#regexで` [0-9] `よりも効率が低いのですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-31 18:41:08139ブラウズ

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

c#正規表現

効率はよりも低い:お問い合わせのパフォーマンスの違いd[0-9] 最近のパフォーマンスは比較的予想外に発見されています。通常、指定された文字のスコープの効率は、文字セットよりも高い必要があります。さらに、より長い

文字セットと比較しても、

はパフォーマンスの欠点も示しています。 d [0-9]この驚くべき結果を説明するために、いくつかの考えられる理由を探りましょう:[0123456789] dは、

で指定された10文字だけでなく、すべてのユニコード番号を表します。 Unicodeには、ペルシャ数字(۱۲۳۴۵۶۷۸۹)など、さまざまな言語の他の数字が含まれています。このより広い範囲は、追加の計算オーバーヘッドを導入する可能性があり、それにより

の効率が低下します。

この概念を説明するために、次のコードを使用して、すべてのユニコード番号のリストを生成できます。

これは、次の文字(およびその他の文字)を含む長い文字列を生成します:

d ٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯ [0-9]d正規表現エンジンは、さまざまな方法で

および

を達成する可能性があり、パフォーマンスの違いにつながる可能性があります。 C#正規表現エンジンは、効率を改善するために

<code class="language-csharp">StringBuilder sb = new StringBuilder();
for (UInt16 i = 0; i < 0x10FFFF; i++)
{
    if (char.IsDigit((char)i))
    {
        sb.Append((char)i);
    }
}
string allUnicodeDigits = sb.ToString();</code>
を特に最適化する場合があり、

のより広い範囲はそのような最適化を制限する可能性があります。

結論:

最初は驚くべきことでしたが、パフォーマンスの低下は、ユニコード数の拡張認識に起因する可能性があります。限られた数字セット(0-9など)を使用する場合、、または

はより良い効率を提供できます。ただし、異なる言語の幅広い数値を一致させる必要がある場合は、

は依然として強力なツールです。 d

以上がなぜ `\ d`はc#regexで` [0-9] `よりも効率が低いのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。