Rumah >pembangunan bahagian belakang >C++ >Kenapa `\ d` lebih perlahan daripada` [0-9] `dalam C# regex?

Kenapa `\ d` lebih perlahan daripada` [0-9] `dalam C# regex?

Linda Hamilton
Linda Hamiltonasal
2025-01-31 18:31:13239semak imbas

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

C#Ekspresi biasa

lebih perlahan daripada lebih perlahan d [0-9] Artikel ini membincangkan penemuan yang mengejutkan dalam enjin ekspresi biasa C

perbezaan antara d dan [0-9] [0-9] d

Sebab utama perbezaan kecekapan adalah perbezaan antara kedua -dua watak ini:

d [0-9] : Padankan mana -mana watak nombor Unicode. Ini termasuk bukan sahaja nombor standard 0-9, tetapi juga nombor lain yang digunakan dalam bahasa dan sistem penulisan yang berbeza. Sebagai contoh, nombor Parsi dan nombor Devanagari juga

.

    :
  • hanya sepadan dengan nombor 0-9. Ia adalah perwakilan padat set aksara . d Kesan terhadap prestasi d
  • Apabila memadankan rentetan dengan ungkapan biasa, enjin ekspresi biasa perlu membandingkan setiap aksara dalam rentetan dengan kelas aksara yang ditentukan. Untuk , ia mesti melakukan pemeriksaan tambahan untuk menentukan sama ada watak itu adalah nombor Unicode, yang mungkin lebih tinggi daripada watak pemeriksaan mudah dalam julat 0-9. [0-9] Pengesahan Ujian [0123456789] Kod ujian yang disediakan oleh
  • menunjukkan perbezaan prestasi ini. Pada lebih daripada 10,000 rentetan rawak (setiap rentetan mengandungi kira -kira 50%daripada nombor), hasil berikut diperolehi:

Ekspresi biasa : 00: 00: 00.2141226 (lebih perlahan)

Ekspresi biasa d: 00: 00: 00.1357972 (cepat)

Ekspresi biasa : 00: 00: 00.13888997 (sedikit lebih perlahan daripada )

Kesimpulan
  • d Walaupun adalah singkatan mudah
  • , ia tidak semestinya pilihan terbaik dari segi prestasi. Jika anda hanya perlu memadankan nombor standard 0-9, disyorkan untuk menggunakan julat aksara
  • . [0-9]

Atas ialah kandungan terperinci Kenapa `\ d` lebih perlahan daripada` [0-9] `dalam C# regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn