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 サイトの他の関連記事を参照してください。