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

C#regexで「[0-9] `よりも遅いのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-31 18:31:13185ブラウズ

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

c#正規表現

より遅いより遅いd この記事では、C#正規表現エンジンでの驚くべき発見について説明しています。[0-9]文字型は、がスーパーセットであっても、

文字範囲効率よりも低いようです。

d[0-9][0-9] d

の違い

効率の違いの主な理由は、これら2つのキャラクターの違いです。 d [0-9]Unicode番号の文字を一致させます。これには、標準の数値0〜9だけでなく、異なる言語やライティングシステムで使用される他の数字も含まれます。たとえば、ペルシャの数字とデヴァナガリの数も

です。

  • 番号0-9にのみ一致します。これは、キャラクターセットのコンパクトな表現です。 d パフォーマンスへの影響d
  • 文字列を正規表現と一致させる場合、正規表現エンジンは、文字列内の各文字を指定された文字クラスと比較する必要があります。 の場合、文字がユニコード数であるかどうかを判断するために追加の検査を実行する必要があります。これは、0〜9の範囲の単純なチェック文字よりも高い場合があります。 [0-9]テスト検証[0123456789]
  • によって提供されるテストコードは、このパフォーマンスの違いを示しています。 10,000を超えるランダムな文字列(各文字列には数字の約50%が含まれています)で、次の結果が得られます。

正規表現:00:00:00.2141226(遅い)

正規表現

:00:00:00.1357972(fast)d

正規表現

:00:00:00.1388997(よりもわずかに遅い)

結論

  • dの便利な略語ですが、パフォーマンスの観点からは必ずしも最良の選択ではありません。標準番号0〜9のみを一致させる必要がある場合は、
  • 文字範囲を使用することをお勧めします。

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

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