Heim > Backend-Entwicklung > C++ > Warum funktioniert das Inline-Regex-Trennzeichen in C# Regex.Replace() nicht?

Warum funktioniert das Inline-Regex-Trennzeichen in C# Regex.Replace() nicht?

Linda Hamilton
Freigeben: 2025-01-22 04:31:09
Original
499 Leute haben es durchsucht

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

C# Regex: Inline-Trennzeichen vermeiden

Problem:

Eine häufige Gefahr bei der Verwendung regulärer Ausdrücke in C# ist die falsche Verwendung von Inline-Trennzeichen. Dies führt häufig zu unerwartetem Verhalten beim Versuch, Zeichenfolgen zu ersetzen. Zum Beispiel ein regulärer Ausdruck zum Entfernen von „/“, „-“ und „.“ aus einer Zeichenfolge könnte fehlschlagen.

Beispiel:

Der folgende Code versucht, „/“, „-“ und „.“ zu ersetzen. mit einer leeren Zeichenfolge, aber es funktioniert nicht richtig:

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
Nach dem Login kopieren

Lösung:

C# unterscheidet sich von Sprachen wie PHP, Perl oder JavaScript in seiner Regex-Syntax. Inline-Trennzeichen (wie / im Beispiel oben) werden nicht unterstützt. Der richtige Ansatz besteht darin, sie wegzulassen:

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

Um speziell auf „/“, „-“ und „.“ abzuzielen, verwenden Sie eine Zeichenklasse:

name = Regex.Replace(name, @"[/\-\.]", ""); // Correctly targets specific characters
Nach dem Login kopieren

Erklärung:

Das @-Symbol vor der Regex-Zeichenfolge weist auf ein wörtliches Zeichenfolgenliteral hin und verhindert, dass C# Backslashes speziell interpretiert. W entspricht jedem nicht alphanumerischen Zeichen und entfernt effektiv „/“, „-“, „.“ und andere ähnliche Symbole. Das verbesserte Beispiel verwendet eine Zeichenklasse [/-.], um die zu entfernenden Zeichen explizit zu definieren. Das g-Flag (globaler Ersatz) wird implizit von Regex.Replace in C# gehandhabt. Daher sind in der C#-Regex.Replace-Methode keine Trennzeichen oder globalen Flags erforderlich.

Das obige ist der detaillierte Inhalt vonWarum funktioniert das Inline-Regex-Trennzeichen in C# Regex.Replace() nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage