語言

Match.NextMatch 方法

定義

回傳一個新 Match 物件,顯示下一場比賽的結果,從上一場比賽結束的位置開始(即最後一位配對角色後的角色)。

public:
 System::Text::RegularExpressions::Match ^ NextMatch();
public System.Text.RegularExpressions.Match NextMatch();
member this.NextMatch : unit -> System.Text.RegularExpressions.Match
Public Function NextMatch () As Match

傳回

下一個正則表達式匹配。

例外狀況

發生逾時。

備註

此方法類似於再次呼叫 Match(String, Int32) 並傳入 Index + Length 新的起始位置。

此方法不會修改目前的實例。 取而代之的是,它會回傳一個 Match 包含下一場配對資訊的新物件。

嘗試取得下一個匹配時,若執行逾時值且尋找下一個匹配的嘗試超過該逾時區間,可能會拋出 a RegexMatchTimeoutException

當嘗試將正則表達式模式與空匹配匹配時,正則表達式引擎會在重新嘗試匹配前,先推進輸入字串中的一個字元,以避免無限迴圈。 叫牌者不應假設每場比賽至少會前進一個名次,因為零寬度比賽是可能的。

給呼叫者的注意事項

當呼叫該方法重複 NextMatch() 匹配嘗試時,正則表達式引擎會對空匹配給予特殊處理。 通常, NextMatch() 搜尋下一場比賽會從上一場比賽結束的地方開始。 然而,在一場空場比賽後,該 NextMatch() 方法會前進一個角色,然後再嘗試下一場比賽。 此行為保證正則表達式引擎能在字串中推進。 否則,因為空匹配不會產生前進,下一次匹配會從與前一匹配完全相同的位置開始,且會重複匹配相同的空字串。

下列範例提供一個實例。 正則表達式模式 a* 會搜尋字串「abaabb」中零次或多個字母「a」的出現。 如範例所示,搜尋結果會找到六個匹配。 第一次配對嘗試找到第一個「a」。 第二場比賽正好從第一場比賽結束的地方開始,在第一場比賽結束前;它找不到任何「a」的出現,並回傳一個空字串。 第三場比賽並非完全從第二場比賽結束的地方開始,因為第二場比賽回傳的是空的串。 相反地,它會從第一個「b」之後的一個字元開始。 第三次匹配會找到兩次「a」,並返回「aa」。 第四次配對嘗試從第三對結束處開始,在第二個「b」之前,並返回一個空字串。 第五次配對嘗試同樣前進一個字元,使其在第三個「b」之前開始,並返回空字串。 第六場比賽從最後一個「b」開始,並返回空字串。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string pattern = "a*";
      string input = "abaabb";
      
      Match m = Regex.Match(input, pattern);
      while (m.Success) {
         Console.WriteLine("'{0}' found at index {1}.", 
                           m.Value, m.Index);
         m = m.NextMatch();
      }
   }
}
// The example displays the following output:
//       'a' found at index 0.
//       '' found at index 1.
//       'aa' found at index 2.
//       '' found at index 4.
//       '' found at index 5.
//       '' found at index 6.
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim pattern As String = "a*"
      Dim input As String = "abaabb"
      
      Dim m As Match = Regex.Match(input, pattern)
      Do While m.Success
         Console.WriteLine("'{0}' found at index {1}.", 
                           m.Value, m.Index)
         m = m.NextMatch()
      Loop         
   End Sub
End Module
' The example displays the following output:
'       'a' found at index 0.
'       '' found at index 1.
'       'aa' found at index 2.
'       '' found at index 4.
'       '' found at index 5.
'       '' found at index 6.

適用於