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
Linda HamiltonOriginal
2025-01-22 04:31:09436Durchsuche

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:

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

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:

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

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

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

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!

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