本文提供此 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: {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錨點被指定在模式的右端時,將限制首次比對必須恰好以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,則不會擲回任何例外狀況。