string a=@"<a href=""thread-582174-1-1.html""><a href=""thread-582175-1-1.html"" title=""新窗口打开"" target=""_blank""><a href=""thread-582174-2-1.html"">2</a> <a href=""thread-582174-3-1.html"">3</a>"; //原正则:<\w*a \w*href\w*=\w*"(thread[^"]*-\d+-\d+\.html)"+w*>
string pattern = @"<\w*a \w*href\w*=\w*'""(thread[^'""]*-\d+-\d+\.html)'""+w*>";//写错在哪里?
MatchCollection m = Regex.Matches(a,pattern);
for (int i = 0; i < m.Count; i++)
{
string stUrl = m[i].Value.ToString();
Response.Write(stUrl);
}以上正则在测试器里能正常,可放到代码中了之后,没有输出,正则写错在哪?
string pattern = @"<\w*a\s*\w*href\w*=\w*""(thread[^""]*-\d+-\d+\.html)""+w*>";//写错在哪里?
MatchCollection m = Regex.Matches(a,pattern);
for (int i = 0; i < m.Count; i++)
{
string stUrl = m[i].Value.ToString();
Response.Write(stUrl);
}自己对照一下看看吧.
String pattern=@"<a.*?href=""(.*?)"".*?>";测试通过
string a=@"<a href=""thread-582174-1-1.html""><a href=""thread-582175-1-1.html"" title=""新窗口打开"" target=""_blank""><a href=""thread-582174-2-1.html"">2</a> <a href=""thread-582174-3-1.html"">3</a>";MatchCollection mc = Regex.Matches(a,@"(?is)(?<=<a\s+.*?href\s*=\s*"")thread[^""]+");
foreach(Match m in mc)
{
Response.Write(m.Value);
}// 这里取到4个连接 但是只是包含 thread 的连接
// 如果只是取到连接而不需要考虑连接中是否含有 thread, 可以用这个 @"(?is)(?<=<a\s+.*?href\s*=\s*"")[^""]+" , 欧了