我正在使用strips the href tags out of an html doc保存到字符串的正则表达式。以下代码是我在C#控制台应用程序中使用它的方式。
Match m = Regex.Match(htmlSourceString, "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']");
if (m.Success)
{
Console.WriteLine("values = " + m);
}
但是,它只返回一个结果,而不是html页面上所有href标记的列表。我知道它有效,因为当我尝试RegexOptions.RightToLeft
时,它返回字符串中的最后一个href标签。
我的if语句中是否有某些内容不允许我返回所有结果?
答案 0 :(得分:17)
匹配方法搜索字符串的第一个出现位置,匹配方法搜索所有出现的内容。
答案 1 :(得分:2)
如果使用Match而不是Match es ,则需要使用循环来获取在每个循环结束时调用m.NextMatch()的所有匹配项。例如:
Match m = Regex.Match(htmlSourceString, "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']");
Console.Write("values = ");
while (m.Success)
{
Console.Write(m.Value);
Console.Write(", "); // Delimiter
m = m.NextMatch();
}
Console.WriteLine();