我正在检查字符串是否是有效的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;
}
但是,我想将这些正则表达式组合起来只使用一个。
答案 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;
...
}