Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembatas Regex Sebaris Tidak Berfungsi dalam C# Regex.Replace()?

Mengapa Pembatas Regex Sebaris Tidak Berfungsi dalam C# Regex.Replace()?

Linda Hamilton
Linda Hamiltonasal
2025-01-22 04:31:09458semak imbas

Why Doesn't Inline Regex Delimiter Work in C# Regex.Replace()?

C# Regex: Mengelakkan Pembatas Sebaris

Isu:

Perangkap biasa apabila menggunakan ungkapan biasa dalam C# ialah penggunaan pembatas sebaris yang salah. Ini selalunya membawa kepada tingkah laku yang tidak dijangka apabila mencuba penggantian rentetan. Sebagai contoh, regex direka untuk mengalih keluar "/", "-", dan "." daripada rentetan mungkin gagal.

Contoh:

Kod berikut cuba menggantikan "/", "-", dan "." dengan rentetan kosong, tetapi ia tidak akan berfungsi dengan betul:

<code class="language-csharp">string name = "dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487";
name = Regex.Replace(name, @"/\W/g", ""); // Incorrect usage of delimiters</code>

Penyelesaian:

C# berbeza daripada bahasa seperti PHP, Perl atau JavaScript dalam sintaks regexnya. Pembatas sebaris (seperti / dalam contoh di atas) tidak disokong. Pendekatan yang betul ialah meninggalkannya:

<code class="language-csharp">string name = "dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487";
name = Regex.Replace(name, @"\W", ""); // Correct syntax</code>

Untuk menyasarkan "/", "-", dan "." secara khusus, gunakan kelas aksara:

<code class="language-csharp">name = Regex.Replace(name, @"[/\-\.]", ""); // Correctly targets specific characters</code>

Penjelasan:

Simbol @ sebelum rentetan regex menunjukkan rentetan verbatim literal, menghalang C# daripada mentafsir garis miring ke belakang secara khusus. W sepadan dengan mana-mana aksara bukan abjad angka, dengan berkesan mengalih keluar "/", "-", "." dan simbol lain yang serupa. Contoh yang dipertingkatkan menggunakan kelas aksara [/-.] untuk mentakrifkan aksara yang akan dialih keluar secara eksplisit. Bendera g (penggantian global) dikendalikan secara tersirat oleh Regex.Replace dalam C#. Oleh itu, tiada pembatas atau bendera global diperlukan dalam kaedah C# Regex.Replace.

Atas ialah kandungan terperinci Mengapa Pembatas Regex Sebaris Tidak Berfungsi dalam C# Regex.Replace()?. 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