有没有一种方法可以将所有具有特定域的链接收集到一个字符串中,其中它们只包含以下任一链接:
href="http://yahoo.com/media/news.html"
或
>http://yahoo.com/media/news.html<
所以基本上链接要么以href="为前缀并以 " 结尾
或
被 >< 包围的链接.
我尝试使用 Regex ( "href=\"([^\"]*)\"></A>" )但没有匹配到任何东西。
请您参考如下方法:
尝试以下操作:
string[] inputs = { "href=\"http://yahoo.com/media/news.html\"", ">http://yahoo.com/media/news.html<" };
string pattern = @"(?:href=""|>)(?<Url>http://.+?)[<""]";
foreach (string input in inputs)
{
Match m = Regex.Match(input, pattern);
if (m.Success)
{
Console.WriteLine(m.Groups["Url"].Value);
}
}
编辑:另一种方法是使用环视,以便匹配但不捕获文本。这允许您直接使用 Match.Value 而不是使用组。请尝试下面的替代方法。
string pattern = @"(?<=href=""|>)http://.+?(?=<|"")";
foreach (string input in inputs)
{
Match m = Regex.Match(input, pattern);
if (m.Success)
{
Console.WriteLine(m.Value);
}
}
编辑 #2: 根据此处评论中的请求,一种模式将不匹配文本中包含“...”的 URL。
string pattern = @"(?<=href=""|>)http://(?!.*\.{3}).+?(?=<|"")";
唯一的变化是添加了 (?!.*\.{3}),这是一个否定的前瞻,如果指定的后缀不存在,则允许模式匹配。在这种情况下,它会检查“...”是否不存在。如果您需要匹配至少 3 个点,请使用 {3,}。
