【问题标题】:C# Regex String Array escape *C# 正则表达式字符串数组转义 *
【发布时间】:2018-08-16 19:35:12
【问题描述】:

我有这个文件扩展名的字符串数组:

public string[] mimeArray = new string[] { "text / plain", @"text / htmlmultipart/.*", "application/octet-stream", @"application/.*", @"text/.*", @"image/.*", @"audio/.*", @"video/.*" };};

我的正则表达式无法正常工作,正在占用:

"text / plain", 
"text / htmlmultipart\\", 
"application/octet-stream",
 "application\\", 
"text\\", 
"image\\", 
"audio\\", 
"video\\"

我不知道我在这里做错了什么。我需要我的数组:

image/*

image/png等文件扩展名进行比较

我有一个带有文件附件的 for each 循环,我将扩展名保存在本地变量中:

var mimeType = MimeMapping.GetMimeMapping(item.Name);

然后我需要验证扩展名是否存在于声明的数组中。我用这个方法:

private bool ValidateMime(string mimeType)
        {
            if(mimeArray.Contains(mimeType))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

谁能帮我纠正我的数组?

【问题讨论】:

  • 你试过image/\\*
  • 我刚试过,但它也不起作用。我也试过用@开头的
  • 向我们展示您尝试过的正则表达式。
  • "\*" 不是有效的字符串文字。请在问题中发布真实代码,整个相关代码。您的问题出在缺少的代码中。
  • 我相信您尝试将 mime 过滤器转换为正则表达式模式,例如image\* -> ^image\\.*$

标签: c# regex string escaping


【解决方案1】:

根据像regexstorm这样的正则表达式测试器,模式

(image/[*])

或者如果您不需要标记整个单词

image/[*]

将匹配您的输入请求

image/*

【讨论】:

  • 这给我带来了 [*]
【解决方案2】:

我同意 Ehsan 的观点,"image\*" 将匹配“图像”之后的任何内容

您可以尝试@"image/.*",因为.NET 正则表达式引擎需要".*" 语法。 Bash 脚本和其他正则表达式引擎可以使用裸通配符 *,但 .NET 不同。

字符串文字(@"text" 代码)允许您将特殊字符放入字符串中,而无需将它们转义。 See MSDN

【讨论】:

  • 这正确地取了像 image/.* 这样的值,但是当我与 Image/png 比较时它返回 false
  • @pedrodotnet 正则表达式可以匹配一个字符串,它不会“接受”任何东西。正则表达式不能返回真或假,正则表达式方法可以。请更新问题。
  • pedro,您的意思是将Image/png 大写吗?如果是这样,请确保正则表达式操作不区分大小写。
【解决方案3】:

问题在于 mimeArray 是一个字符串 array 所以它总是将字符串作为文字。

解决方法是将数组创建为Regex array,如下所示:

 private Regex[] mimeArray = new[] {
            new Regex(@"^text\/plain"),
            new Regex(@"text\/html"),
            new Regex(@"^multipart\/.*"),
            new Regex(@"^application\/octet-stream"),
            new Regex(@"^application\/.*$"),
            new Regex(@"^text\/.*$"),
            new Regex(@"^image\/.*$"),
            new Regex(@"^audio\/.*$"),
            new Regex(@"^video\/.*$")
        };

然后修改比较器方法:

private bool ValidateMime(string mimeType)
        {
            if(mimeArray.Any(x => x.IsMatch(mimeType)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

感谢所有花时间帮助我的人。我希望这对任何人也有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多