结合检查有效URL并解压缩文件扩展名

时间:2015-05-23 19:04:33

标签: c# asp.net regex

我正在检查字符串是否是有效的URL,然后使用另一个正则表达式来获取URL中的文件扩展名。

这是我正在使用的代码:

public string GetUrlFileName(string url) {

        string fileExtension = string.Empty;

        **Regex regex = new Regex(@"(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(?:jpg|gif|png|pdf))(?:\?([^#]*))?(?:#(.*))?");**

        Match match = regex.Match(url.ToLower());

        if(match.Success) {

            **Regex regexEnetnsion = new Regex(@"([\w]{2,4})(\?|$)");**

            Match GetExtension = regexEnetnsion.Match(url);

            if(GetExtension.Success) {

                fileExtension = GetExtension.Value;
            }
        }
        return fileExtension;
    }

但是,我想将这些正则表达式组合起来只使用一个。

1 个答案:

答案 0 :(得分:1)

使用capturing group代替非捕获:

  

除了将正则表达式的一部分组合在一起外,还有括号   还创建一个编号的捕获组。它存储了部分内容   字符串匹配的正则表达式部分   括号中。

因此,您只需删除?:

即可
(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(jpg|gif|png|pdf))(?:\?([^#]*))?(?:#(.*))?
                                          ^

第4组将包含您的扩展程序。

C#:

Regex regex = new Regex(@"(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(jpg|gif|png|pdf))(?:\?([^#]*))?(?:#(.*))?");
Match match = regex.Match(url.ToLower());
if(match.Success) {
    string ext = match.Groups[4].Value;
 ...
}

请参阅RegexStorm demo, see Table tab