为什么这个正则表达式不适用于多个扩展?

时间:2012-08-20 18:56:48

标签: c# regex

以下代码不会一直有效。我看过无数的正则表达式示例,但很少涉及多个扩展的使用。

public bool FAQPNFileCheck(string name)
{
    if (name.Length > 0)
    {

        Match match = Regex.Match(name, 
                                  @"\\([A-Za-z0-9_-]+)\.(jpg|doc|pdf)$", 
                                  RegexOptions.IgnoreCase);

        // Here we check the Match instance.
        if (match.Success)
        {
            // Finally, we get the Group value and display it.
            string key = match.Groups[1].Value;
            return true;
            //Console.WriteLine(key);
        }

    }
    if (name == "")
    {
        return true;
    }

    return false;
}

3 个答案:

答案 0 :(得分:1)

如果您正在寻找类似这样的内容:this_is_not_a_picture.jpg.doc,正如安德烈所问,您在正则表达式中不允许使用文字点(.)直到结束。

这应该这样做:

\\([A-Za-z0-9._-]+)\.(jpg|doc|pdf)$

答案 1 :(得分:0)

RightToLeft

试试
Regex r=new Regex(@"([A-Za-z0-9_-]+)\.(jpg|doc|pdf)$",RegexOptions.RightToLeft);

答案 2 :(得分:-1)

好的,毕竟,你想要允许extesions jpg doc pdf 的文件,对吧?

我们试试这个:

Regex.Match(name, @"^(?i:[A-Z0-9\_\-]+)\.(?i:jpg|doc|pdf)$", RegexOptions.Compiled);

正如 latkin 所指出的那样,如果你打算一次使用这个Regex对象,那么RegexOptions.Compiled不是一个好选择,因为实例化它需要更长的时间物体。但是,匹配运行速度会更快,所以如果您要在几个文件上使用它(如我所假设的那样),最好保留它,然后将其保存在Regex实例中。