代码:
private void button2_Click(object sender, EventArgs e)
{
string url="";
string hexpwd="";
string sid="";
string r="";
string extend="";
string r_sid="";
string login_url = "";
string rip = "";
Regex imgreg = new Regex("马上登录\\s<go\\shref=\"(?<url>[^\"]*)\"[\\s\\S]*\"hexpwd\"\\svalue=\"(?<hexpwd>\\S*)\"[\\s\\S]*\"sid\"\\svalue=\"(?<sid>[^\"]*)\"[\\S\\s]*\"r\"\\svalue=\"(?<r>\\d+)\"[\\s\\S]*\"extend\"\\svalue=\"(?<extend>[^\"]+)\"[\\s\\S]*\"r_sid\"\\svalue=\"(?<r_sid>[^\"]+)\"[\\s\\S]*\"login_url\"\\svalue=\"(?<login_url>[^\"]*)\"[\\s\\S]*\"rip\"\\svalue=\"(?<rip>\\S*)\"", RegexOptions.Compiled);
Match imgmat = imgreg.Match(loginhtml);
if (imgmat.Success)
{
url = imgmat.Groups["url"].Value;
hexpwd = imgmat.Groups["hexpwd"].Value;
sid = imgmat.Groups["sid"].Value;
r = imgmat.Groups["r"].Value;
extend = imgmat.Groups["extend"].Value;
r_sid = imgmat.Groups["r_sid"].Value;
login_url = imgmat.Groups["login_url"].Value;
rip = imgmat.Groups["rip"].Value;
}
else
{
MessageBox.Show("系统错误,正则匹配失败");
}
}
loginhtml为string型。。。。。
这样代码是会提示系统错误,正则匹配失败的。。。。。。
如果加上:
richtextbox.text=loginhtml;
里面改为Match imgmat = imgreg.Match(richtextbox.text);
这样就不会出错了,这是怎么了?
我在前面的代码处理中用过几次Match imgmat = imgreg.Match(loginhtml);处理一小段正则是可以的啊,就这个出了问题
可能提交的时候loginhtml的值丢失或变了,而你用richtextbox.text保存了loginhtml就没这个问题。
断点看了是没有变的。。。。。。。
但URL参数中包含中文时,浏览器会自动对参数进行Encode,这样就匹配不上了