Heim >Backend-Entwicklung >C++ >Warum funktioniert das Inline-Regex-Trennzeichen in C# Regex.Replace() nicht?
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!