正则表达式问题

chenjf2k 2007-04-05 03:43:29
完整的程序如下:
============================================================
#region 远程文件上传.....

#region 替换URL地址
/// <summary>
/// 替换字符串中的远程文件为本地文件并保存远程文件
/// </summary>
/// <param name="sHTML">要上传的内容</param>
/// <param name="sPath">文件路径</param>
/// <returns>返回替换后的HTML内容</returns>
public string ReplaceRemoteUrl(string sHTML, string sPath)
{
//设置为在上传内容中搜索指定值的正则表达式
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(sHTML, @"(http://(?!(" + Context.Request.ServerVariables["SERVER_NAME"] + @"/shineOA/resource/))(\S*\/)((\S)+[.]{1}(gif|jpg|png|bmp)))", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
string[] a_RemoteUrl = new string[mc.Count];
//转入无重复数据
for (int i = 0; i < mc.Count; i++)
{
a_RemoteUrl[i] = (mc[i].Groups[0].ToString());
}


//保存的上传后的文件名称
string SaveFileName;
//文件类型
string SaveFileType;


//如果不存在建立目录
DirectoryInfo uploadForlder = new DirectoryInfo(Context.Server.MapPath(sPath));
if (!uploadForlder.Exists) uploadForlder.Create();

//遍历上传内容中允许的文件
foreach (string str in a_RemoteUrl)
{
//获取上传文件的扩展名
SaveFileType = str.Substring(str.LastIndexOf(".") + 1).ToLower();
//获取上传后的随机文件名
SaveFileName = System.String.Concat(DateTime.Now.Hour.ToString("00"), DateTime.Now.Minute.ToString("00"), DateTime.Now.Second.ToString("00"), new Random().Next(1, 99).ToString(), ".", SaveFileType);
//保存远程的文件到本地
if (SaveRemoteFile(sPath, SaveFileName, str))
{
sHTML = sHTML.Replace(str, sPath + SaveFileName);
}
}
return sHTML;
}
#endregion

#region 保存远程文件.....
/// <summary>
/// 保存远程的文件到本地
/// </summary>
/// <param name="s_LocalFolder"></param>
/// <param name="s_LocalFileName">保存到本地文件名</param>
/// <param name="s_RemoteFileUrl">远程读取的文件URL</param>
/// <returns>如果保存成功则返回 true,否则返回 false</returns>
private bool SaveRemoteFile(string s_LocalFolder, string s_LocalFileName, string s_RemoteFileUrl)
{
WebClient wc = new WebClient();
//下载远程文件资源
byte[] buff = wc.DownloadData(s_RemoteFileUrl);
if (buff.Length == 0)
{
return false;
}

string relativelyFilePathName = string.Concat(s_LocalFolder, s_LocalFileName);
//把远程文件保存到本地
using (System.IO.FileStream fs = new System.IO.FileStream(Context.Server.MapPath(relativelyFilePathName), System.IO.FileMode.Create, System.IO.FileAccess.Write))
{

fs.Write(buff, 0, buff.Length);
fs.Close();
}

return true;
}

#endregion

#endregion

====================================================================

其中第13行
System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(sHTML, @"(http://(?!(" + Context.Request.ServerVariables["SERVER_NAME"] + @"/shineOA/resource/))(\S*\/)((\S)+[.]{1}(gif|jpg|png|bmp)))", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
意思是匹配html字串中的所有的图片地址,但这种写法本身不包括匹配本地的“file:///”文件,只匹配http://文件
如果要匹配file:///地址的图片文件应该怎么改进呢?

感谢高手!
...全文
166 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenjf2k 2007-04-05
  • 打赏
  • 举报
回复
感谢!结帐
blackant2 2007-04-05
  • 打赏
  • 举报
回复
@"(http://(?!(" + Context.Request.ServerVariables["SERVER_NAME"] + @"/shineOA/resource/))(\S*\/)((\S)+[.]{1}(gif|jpg|png|bmp)))"


===>
(http:|file://)//
chenjf2k 2007-04-05
  • 打赏
  • 举报
回复
太快了,楼上真强
RexZheng 2007-04-05
  • 打赏
  • 举报
回复
@"((?:http://|file:///)(?!(" + Context.Request.ServerVariables["SERVER_NAME"] + @"/shineOA/resource/))(\S*\/)((\S)+[.]{1}(gif|jpg|png|bmp)))"

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧