使用Regex.Replace引发的错误

需求:将字符串"http://www.mzwu.com/?key={md5:admin888}"中的"{md5:admin888}"用"admin888"的MD5加密结果替换。

说明:"admin888"正确的加密结果应为:7FEF6171469E80D32C0559F88B377245

错误的代码:
Regex.Replace("http://www.mzwu.com/?key={md5:admin888}", @"{md5:(\w+)}", System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile("$1", "MD5"))

返回的结果为:http://www.mzwu.com/?key=06D3730EFC83058F497D3D44F2F364E3

分析:加密比替换先执行,上边的执行过程实际上先将"$1"加密成"06D3730EFC83058F497D3D44F2F364E3",再用它替换"{md5:admin888}",而不是先将"$1"替换成"admin888"再加密之后替换。正确的代码为:
Match match = Regex.Match("http://www.mzwu.com/?key={md5:admin888}", @"{md5:([\w=&]+)}");
if (match.Success)
{
    Response.Write(Regex.Replace("http://www.mzwu.com/?key={md5:admin888}", @"{md5:([\w=&]+)}", System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(match.Groups[1].ToString(), "MD5")));
}


评论: 0 | 引用: 0 | 查看次数: 3618
发表评论
登录后再发表评论!