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。
第一個或多個相符專案
這個方法會傳回在 中符合正則表達式模式之startat
input
字元位置或之後找到的第一個子字串。 您可以重複呼叫傳回物件的 方法來擷取後續 Match 的相符專案 Match.NextMatch 。 您也可以呼叫 Regex.Matches(String, Int32) 方法來擷取單一方法呼叫中的所有相符專案。
逾時例外狀況
如果比對作業的執行時間超出 RegexMatchTimeoutException 建構函式所指定的逾時間隔,就會擲回 Regex.Regex(String, RegexOptions, TimeSpan) 例外狀況。 呼叫建構函式時若未設定逾時間隔,則如果作業超過為建立 Regex 物件的應用程式定義域設定的任何逾時值,就會擲回例外狀況。 如果在 Regex 建構函式呼叫或應用程式定義域的屬性中未定義任何逾時,或逾時值是 Regex.InfiniteMatchTimeout,則不擲回任何例外狀況。