共用方式為


範例:掃描 HREF

更新:2007 年 11 月

下列範例會搜尋輸入字串,並印出所有 href="..." 值和它們在字串中的位置。

Regex 物件

由於 Regex 物件可在 DumHRefs 方法中使用,而該方法可能會從使用者程式碼呼叫多次,因此會使用 static (在 Visual Basic 中為 Shared) Regex.Match(String, String, RegexOptions) 方法。這可讓規則運算式引擎快取規則運算式,並避免每次呼叫方法就必須具現化新 Regex 物件的額外負荷。接著會使用 Match 物件來逐一查看字串中的所有符合項目。在這個範例中,中繼字元 \s 會比對任何空格字元,而 \S 則會比對任何非空格字元。

Private Sub DumpHRefs(inputString As String) 
   Dim m As Match
   Dim HRefPattern As String = "href\s*=\s*(?:""(?<1>[^""]*)""|(?<1>\S+))"

   m = Regex.Match(inputString, HRefPattern, _ 
                   RegexOptions.IgnoreCase Or RegexOptions.Compiled)
   Do While m.Success
      Console.WriteLine("Found href {0} at {1}.", _
                        m.Groups(1), m.Groups(1).Index)
      m = m.NextMatch()
   Loop   
End Sub
private static void DumpHRefs(string inputString) 
{
   Match m;
   string HRefPattern = "href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))";

   m = Regex.Match(inputString, HRefPattern, 
                   RegexOptions.IgnoreCase | RegexOptions.Compiled);
   while (m.Success)
   {
      Console.WriteLine("Found href " + m.Groups[1] + " at " 
         + m.Groups[1].Index);
      m = m.NextMatch();
   }   
}

下列範例示範如何呼叫 DumHRefs 方法。

Public Sub Main()
   Dim inputString As String = "My favorite web sites include:</P>" & _
                               "<A HREF=""https://msdn2.microsoft.com"">" & _
                               "MSDN Home Page</A></P>" & _
                               "<A HREF=""https://www.microsoft.com"">" & _
                               "Microsoft Corporation Home Page</A></P>" & _
                               "<A HREF=""https://blogs.msdn.com/bclteam"">" & _
                               ".NET Base Class Library blog</A></P>"
   DumpHRefs(inputString)                     
End Sub
' The example displays the following output:
'       Found href https://msdn2.microsoft.com at 43
'       Found href https://www.microsoft.com at 102
'       Found href https://blogs.msdn.com/bclteam/) at 176
public static void Main()
{
   string inputString = "My favorite web sites include:</P>" +
                        "<A HREF=\"https://msdn2.microsoft.com\">" +
                        "MSDN Home Page</A></P>" +
                        "<A HREF=\"https://www.microsoft.com\">" +
                        "Microsoft Corporation Home Page</A></P>" +
                        "<A HREF=\"https://blogs.msdn.com/bclteam\">" +
                        ".NET Base Class Library blog</A></P>";
   DumpHRefs(inputString);                     

}
// The example displays the following output:
//       Found href https://msdn2.microsoft.com at 43
//       Found href https://www.microsoft.com at 102
//       Found href https://blogs.msdn.com/bclteam at 176

比對結果類別

搜尋結果儲存在 Match 類別中,提供對搜尋所擷取的全部子字串的存取。它也記憶正在搜尋的字串和正在使用的規則運算式,所以可以使用它們自上次搜尋結束的地方開始執行另一個搜尋。

明確命名的擷取

在傳統規則運算式中,擷取括號會自動循序編號。這會導致兩個問題。首先,如果用插入或移除一組括號的方式修改規則運算式,必須重新撰寫所有參考到已編號擷取的程式碼,才能反映新的編號。其次,因為不同組的括號經常是用來提供兩個替代運算式給可接受的比對項目,因此要判斷哪一個替代運算式實際傳回結果,可能很困難。

為解決這些問題,Regex 支援 (?<name>¡K) 語法,將符合的項目擷取至指定位置 (這個位置可以使用字串或整數來命名,整數則可以更快速地重新叫用)。如此,相同字串的替代比對全都可以導向至相同位置。如果發生衝突,落入位置的最後比對為成功的比對 (不過,有單一位置的多個比對的完整清單可供使用。如需詳細資訊,請參閱 Group.Captures 集合)。

請參閱

其他資源

.NET Framework 規則運算式