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
Barbara Streisandasal
2025-01-31 18:41:08194semak imbas

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:

<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>
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:
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