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
Libérer: 2025-01-22 04:31:09
original
480 Les gens l'ont consulté

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 :

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
Copier après la connexion

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 :

string name = "dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487";
name = Regex.Replace(name, @"\W", ""); // Correct syntax
Copier après la connexion

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

name = Regex.Replace(name, @"[/\-\.]", ""); // Correctly targets specific characters
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal