Skip to main content
 首页 » 编程设计

c#之正则表达式没有捕捉到多个匹配项

2024年02月20日32softidea

假设我有以下 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”,我找不到匹配项。

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

请您参考如下方法:

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

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