Maison >développement back-end >C++ >Pourquoi le délimiteur Regex en ligne ne fonctionne-t-il pas en C# Regex.Replace() ?

Pourquoi le délimiteur Regex en ligne ne fonctionne-t-il pas en C# Regex.Replace() ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 04:31:09436parcourir

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

Regex C# : éviter les délimiteurs en ligne

Problème :

Un piège courant lors de l'utilisation d'expressions régulières en C# est l'application incorrecte des délimiteurs en ligne. Cela conduit souvent à un comportement inattendu lors des tentatives de remplacement de chaînes. Par exemple, une expression régulière conçue pour supprimer "/", "-" et "." à partir d'une chaîne peut échouer.

Exemple :

Le code suivant tente de remplacer "/", "-" et "." avec une chaîne vide, mais cela ne fonctionnera pas correctement :

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

Solution :

C# diffère des langages comme PHP, Perl ou JavaScript dans sa syntaxe regex. Les délimiteurs en ligne (comme / dans l'exemple ci-dessus) ne sont pas pris en charge. La bonne approche est de les omettre :

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

Pour cibler spécifiquement "/", "-" et ".", utilisez une classe de caractères :

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

Explication :

Le symbole @ avant la chaîne regex indique un littéral de chaîne textuelle, empêchant C# d'interpréter spécialement les barres obliques inverses. W correspond à n'importe quel caractère non alphanumérique, supprimant efficacement "/", "-", "." et autres symboles similaires. L'exemple amélioré utilise une classe de caractères [/-.] pour définir explicitement les caractères à supprimer. L'indicateur g (remplacement global) est implicitement géré par Regex.Replace en C#. Par conséquent, aucun délimiteur ou indicateur global n’est nécessaire dans la méthode C# Regex.Replace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn