首页 >后端开发 >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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn