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
Lepaskan: 2025-01-22 04:31:09
asal
481 orang telah melayarinya

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:

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
Salin selepas log masuk

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:

string name = "dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487";
name = Regex.Replace(name, @"\W", ""); // Correct syntax
Salin selepas log masuk

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

name = Regex.Replace(name, @"[/\-\.]", ""); // Correctly targets specific characters
Salin selepas log masuk

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