Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembatas Regex Sebaris Tidak Berfungsi dalam 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!