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中文网其他相关文章!