2012-08-27 79 views
1

假設我有以下代碼爲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」我沒有得到任何匹配。

這是爲什麼?我的正則表達式錯了嗎?

回答

4

你的正則表達式開始於^並以結尾 - 這表示它應該只匹配整個字符串。 ^與行(或字符串)的開頭匹配,並且$與末尾匹配 - 如果在第一個有效URL後面的字符串末尾有更多文本,則不匹配。

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