共用方式為


System.Text.RegularExpressions.Regex.Match 方法

本文提供此 API 參考文件的補充備註。

方法 Match(String, Int32) 會傳回第一個符合正則表達式模式的子字串,從輸入字串中的字元位置開始或之後 startat 。 方法搜尋的正則表示式模式 Match(String, Int32) 是由其中一個 Regex 類別建構函式的呼叫所定義。 如需用來建置正則表達式模式之語言專案的相關信息,請參閱 正則表達式語言 - 快速參考

參數startat

您可以使用 參數,選擇性地指定字串 startat 中的起始位置。 會忽略字串中之前開始 startat 的任何相符專案。 如果您未指定起始位置,搜尋會從預設位置開始,也就是從左至右搜尋的左端 input ,以及從右至左搜尋的右端 input 。 儘管從 開始 startat,但傳回之任何相符專案的索引相對於字串的開頭。

雖然正則表達式引擎不會傳回從 之前 startat開始的任何相符專案,但它不會忽略 之前的 startat字串。 這表示錨點外觀提示等判斷提示仍會套用至整個輸入。 例如,下列程式代碼包含一個模式,其中包含符合外觀判斷提示的模式,即使它發生在輸入字串中的5索引之前 startat 也一樣。

using System;
using System.Text.RegularExpressions;

namespace Examples
{
    public class Example3
    {
        public static void Main()
        {
            string input = "Zip code: 98052";
            var regex = new Regex(@"(?<=Zip code: )\d{5}");
            Match match = regex.Match(input, 5);
            if (match.Success)
                Console.WriteLine("Match found: {0}", match.Value);
        }
    }
}

// This code prints the following output:
// Match found: 98052

提示

  • 如果模式以錨點開頭 ^ ,但 startat 大於0,則單行搜尋中將不會找到相符專案,因為它們受限 ^ 於從索引0開始。
  • \G 滿足startat錨點。 因此,如果您想要限制相符專案,使其剛好在字串中的特定字元位置開始,請將正則表示式 \G 錨定在左邊,以從左至右模式。 這會限制比對,使其必須完全 startat 從 開始(或,當需要多個相符專案時,因此相符專案是連續的)。

由右至左搜尋

從右至左搜尋,也就是使用 選項建構 RegexOptions.RightToLeft 正則表示式模式時,會以下列方式運作:

  • 掃描會向相反方向移動,且模式會從後方(右)到前方(左)進行比對。
  • 默認起始位置是輸入字串的右端。
  • 如果 startat 指定 ,則由右至左掃描從字元 startat 開始 -1 (不是 startat)。
  • \G當錨點在模式的右端指定時,它會將 (first) 比對限制為完全在 startat - 1 結束。

如需從右至左搜尋的詳細資訊,請參閱 從右至左模式

判斷是否找到相符專案

您可以藉由檢查傳 Match 回物件的 Success 屬性值,判斷輸入字串中是否找到正規表達式模式。 如果找到符合的項目,則所傳回 Match 物件的 Value 屬性會包含符合規則運算式模式之 input 的子字串。 如果找不到相符專案,其值為 String.Empty

第一個或多個相符專案

這個方法會傳回在 中符合正則表達式模式之startatinput字元位置或之後找到的第一個子字串。 您可以重複呼叫傳回物件的 方法來擷取後續 Match 的相符專案 Match.NextMatch 。 您也可以呼叫 Regex.Matches(String, Int32) 方法來擷取單一方法呼叫中的所有相符專案。

逾時例外狀況

如果比對作業的執行時間超出 RegexMatchTimeoutException 建構函式所指定的逾時間隔,就會擲回 Regex.Regex(String, RegexOptions, TimeSpan) 例外狀況。 呼叫建構函式時若未設定逾時間隔,則如果作業超過為建立 Regex 物件的應用程式定義域設定的任何逾時值,就會擲回例外狀況。 如果在 Regex 建構函式呼叫或應用程式定義域的屬性中未定義任何逾時,或逾時值是 Regex.InfiniteMatchTimeout,則不擲回任何例外狀況。