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

Posted

技术标签:

【中文标题】包含正则表达式分隔符的简单且经过测试的在线正则表达式在 C# 代码中不起作用【英文标题】:Simple and tested online regex containing regex delimiters does not work in C# code 【发布时间】:2020-09-28 20:00:02 【问题描述】:

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

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

此正则表达式应替换“/”、“-”、“.”和 ””。 但它没有,谁能解释我为什么?

【问题讨论】:

【参考方案1】:

不要使用正则表达式分隔符:

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

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

只是为了避免术语混淆:内联修饰符(强制不区分大小写的搜索、多行、单行、详细和其他模式)当然是受支持的,并且可以用来代替相应的RegexOptions 标志(尽管可能的RegexOptions 标志的数量高于内联修饰符的数量)。不过,regex 分隔符 根本不会影响 regex 模式,它们只是声明语法的一部分,不会影响模式本身。比如说,它们只是 ; 或分隔代码行的换行符的一种替代品。

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

【讨论】:

以上是关于包含正则表达式分隔符的简单且经过测试的在线正则表达式在 C# 代码中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

包含regex分隔符的简单且经过测试的在线regex在C#代码中不起作用

正则表达式匹配逗号分隔的 key=value 列表,其中 value 可以包含逗号

在线正则表达式可视化测试工具

用于测试密码强度的正则表达式

简单的js正则表达式问题

正则表达式在线测试