ホームページ >バックエンド開発 >C++ >C# Regex.Replace() でインライン正規表現区切り文字が機能しないのはなぜですか?

C# Regex.Replace() でインライン正規表現区切り文字が機能しないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-22 04:31:09436ブラウズ

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

C# 正規表現: インライン区切り文字の回避

問題:

C# で正規表現を使用するときによくある落とし穴は、インライン区切り文字の誤った適用です。 これにより、文字列を置換しようとするときに予期しない動作が発生することがよくあります。たとえば、「/」、「-」、および「.」を削除するように設計された正規表現です。文字列からの変換は失敗する可能性があります。

例:

次のコードは、「/」、「-」、および「.」を置換しようとします。空の文字列を指定しても、正しく機能しません:

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

解決策:

C# は、正規表現構文において PHP、Perl、JavaScript などの言語とは異なります。 インライン区切り文字 (上記の例の / など) はサポートされていません。正しいアプローチはそれらを省略することです:

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

「/」、「-」、および「.」を具体的にターゲットにするには、文字クラスを使用します。

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

説明:

正規表現文字列の前の @ 記号は、逐語的な文字列リテラルを示し、C# がバックスラッシュを特別に解釈するのを防ぎます。 W は英数字以外の文字と一致し、「/」、「-」、「.」、およびその他の同様の記号を効果的に削除します。 改良された例では、文字クラス [/-.] を使用して、削除する文字を明示的に定義します。 g フラグ (グローバル置換) は、C# の Regex.Replace によって暗黙的に処理されます。 したがって、C# の Regex.Replace メソッドでは区切り文字やグローバル フラグは必要ありません。

以上がC# Regex.Replace() でインライン正規表現区切り文字が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。