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

Kenapa `\ d` kurang cekap daripada` [0-9] `dalam C# regex?

Barbara Streisand
Lepaskan: 2025-01-31 18:41:08
asal
210 orang telah melayarinya

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

C#Ekspresi biasa

Kecekapan lebih rendah daripada : Perbezaan Prestasi Siasatan d [0-9] Prestasi baru -baru ini agak tidak disangka -sangka. Biasanya, kecekapan skop watak yang ditentukan harus lebih tinggi daripada set aksara. Di samping itu, walaupun dibandingkan dengan set watak yang lebih panjang,

juga menunjukkan kelemahan prestasi.

d Untuk menjelaskan hasil yang mengejutkan ini, marilah kita meneroka beberapa sebab yang mungkin: [0-9] [0123456789] <.> 1. Unicode pengiktirafan digital: d

mewakili semua nombor Unicode, bukan hanya 10 aksara yang dinyatakan dalam

. Unicode mengandungi nombor lain dari pelbagai bahasa, seperti angka Parsi (۱۲۳۴۵۶۷۸۹). Julat yang lebih luas ini boleh memperkenalkan overhead pengiraan tambahan, dengan itu mengurangkan kecekapan

. Untuk menerangkan konsep ini, kita boleh menggunakan kod berikut untuk menghasilkan senarai semua nombor Unicode:

d ini akan menghasilkan rentetan panjang yang mengandungi aksara berikut (dan aksara lain): [0-9] d ٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯

<.> 2. Perbezaan pelaksanaan:

StringBuilder sb = new StringBuilder();
for (UInt16 i = 0; i < 0x10FFFF; i++)
{
    if (char.IsDigit((char)i))
    {
        sb.Append((char)i);
    }
}
string allUnicodeDigits = sb.ToString();
Salin selepas log masuk
enjin ekspresi biasa boleh mencapai

dan

dengan cara yang berbeza, yang mungkin membawa kepada perbezaan prestasi. C#Enjin ekspresi biasa secara khusus boleh mengoptimumkan

untuk meningkatkan kecekapan, dan julat yang lebih luas

boleh mengehadkan pengoptimuman tersebut.

Kesimpulan:

Walaupun ia mengejutkan pada mulanya, d prestasi yang lebih perlahan dapat dikaitkan dengan pengiktirafan pengembangannya terhadap nombor Unicode. Apabila menggunakan set nombor terhad (seperti 0-9), [0-9] atau [0-9] boleh memberikan kecekapan yang lebih baik. Walau bagaimanapun, jika anda perlu memadankan pelbagai nombor dari bahasa yang berbeza, d masih merupakan alat yang berkuasa.

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

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan