正则表达式没有捕获多个匹配

时间:2012-08-27 21:18:47

标签: c# regex

假设我有一个C#控制台应用程序的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace stupidconsoleapp
{
    class Program
    {
        static void Main(string[] args)
        {
            Regex regx = new Regex(@"^(?:https?://)?(?:[\w]+\.)(?:\.?[\w]{2,})+$");

            string test = Console.ReadLine();

            foreach (Match match in regx.Matches(test))
                Console.WriteLine("Match: " + match.Value);

            Console.WriteLine("Press any key to exit.");

            Console.ReadKey();
        }
    }
}

我给它“http://www.cnn.com”它告诉我这个短语匹配;我再次运行并给它“www.cnn.com”并再次得到一个匹配;我再次运行并给它“cnn.com”并获得我的第三次成功比赛。

但是,如果我只输入“http://www.cnn.com www.cnn.com cnn.com”,我就没有匹配。

这是为什么?我的正则表达式错了吗?

1 个答案:

答案 0 :(得分:4)

您的正则表达式以^开头,以$结尾 - 这表示它应该只匹配整个字符串。 ^匹配行(或字符串)的开头,$匹配结尾 - 如果在第一个有效URL之后字符串末尾有更多文本,则它将不匹配。

如果您想要字符串的所有匹配部分,请移除^$