一尘不染

包含正则表达式定界符的简单且经过测试的在线正则表达式在C#代码中不起作用

c#

我有这样一个正则表达式:

name = dr-det-fb.ydp.eu/ebook/trunk/annotations/ctrl.php/api1751-4060-1193-0487
name = Regex.Replace(name, @"/\W/g", "");

此正则表达式应替换“ /”,“-”,“”。与“”。但事实并非如此,有人可以向我解释原因吗?


阅读 340

收藏
2020-05-19

共1个答案

一尘不染

不要使用正则表达式定界符:

name = Regex.Replace(name, @"\W", "");

在C#中,不能使用正则表达式定界符,因为声明正则表达式的语法不同于PHP,Perl或JavaScript或其他支持<action>/<pattern>(/<substituiton>)/modifiers正则表达式声明的语法。

只是为了避免术语混乱:肯定支持 内联修饰符
(强制不区分大小写的搜索,多行,单行,详细模式和其他模式),并且可以使用内联修饰符代替相应的RegexOptions标志(尽管可能的RegexOptions标志数量大于内联修饰符的数量)
)。但是, 正则表达式定界符 根本不影响正则表达式模式,它们只是声明语法的一部分,并且不影响模式本身。说,它们只是;代码行的替代品或换行符。

在C#中,正则表达式定界符不是必需的,因此不受支持。Perl样式s/\W//g将写为var replaced = Regex.Replace(str, @"\W", string.Empty);。等等。

2020-05-19