Regex.Match 方法(System.Text.RegularExpressions)
文章推薦指數: 80 %
在輸入字串搜尋規則運算式的項目,並傳回正確結果為單一Match 物件。
... IgnoreCase); // Match the regular expression pattern against a text string.
跳到主要內容
已不再支援此瀏覽器。
請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。
下載MicrosoftEdge
其他資訊
目錄
結束焦點模式
語言
閱讀英文
儲存
目錄
閱讀英文
儲存
編輯
Twitter
LinkedIn
Facebook
電子郵件
目錄
Regex.Match方法
參考
定義
命名空間:
System.Text.RegularExpressions
組件:System.Text.RegularExpressions.dll
組件:System.dll
組件:netstandard.dll
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。
Microsoft對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在輸入字串搜尋規則運算式的項目,並傳回正確結果為單一Match物件。
本文內容
多載
Match(String,String,RegexOptions,TimeSpan)
使用指定的比對選項和逾時間隔,在輸入字串中搜尋所指定規則運算式的第一個相符項目。
Match(String)
在指定的輸入字串中,搜尋符合Regex建構函式中所指定規則運算式的第一個項目。
Match(String,Int32)
從字串中指定的開始位置開始,在輸入字串中搜尋規則運算式的第一個相符項目。
Match(String,String)
在指定的輸入字串中搜尋所指定規則運算式的第一個相符項目。
Match(String,Int32,Int32)
從指定的開始位置開始並且僅搜尋指定數目的字元,在輸入字串中搜尋規則運算式的第一個相符項目。
Match(String,String,RegexOptions)
使用指定的比對選項,在輸入字串中搜尋所指定規則運算式的第一個相符項目。
Match(String,String,RegexOptions,TimeSpan)
使用指定的比對選項和逾時間隔,在輸入字串中搜尋所指定規則運算式的第一個相符項目。
public:
staticSystem::Text::RegularExpressions::Match^Match(System::String^input,System::String^pattern,System::Text::RegularExpressions::RegexOptionsoptions,TimeSpanmatchTimeout);
publicstaticSystem.Text.RegularExpressions.MatchMatch(stringinput,stringpattern,System.Text.RegularExpressions.RegexOptionsoptions,TimeSpanmatchTimeout);
staticmemberMatch:string*string*System.Text.RegularExpressions.RegexOptions*TimeSpan->System.Text.RegularExpressions.Match
PublicSharedFunctionMatch(inputAsString,patternAsString,optionsAsRegexOptions,matchTimeoutAsTimeSpan)AsMatch
參數
input
String
用來搜尋比對的字串。
pattern
String
要比對的規則運算式模式。
options
RegexOptions
列舉值的位元組合,提供用於比對的選項。
matchTimeout
TimeSpan
逾時間隔,若要表示此方法不應逾時則為InfiniteMatchTimeout。
傳回
Match
物件,包含符合之項目的相關資訊。
例外狀況
ArgumentException
發生規則運算式剖析錯誤。
ArgumentNullException
input或pattern為null。
ArgumentOutOfRangeException
options不是RegexOptions值的有效位元組合。
-或-
matchTimeout為負數、零或約大於24天。
RegexMatchTimeoutException
發生逾時。
如需逾時的詳細資訊,請參閱<備註>一節。
備註
方法Match(String,String,RegexOptions,TimeSpan)會傳回符合輸入字串中正則運算式模式的第一個子字串。
如需用來建置正則運算式模式之語言專案的資訊,請參閱正則運算式語言-快速參考。
靜態Match(String,String,RegexOptions,TimeSpan)方法相當於使用Regex(String,RegexOptions,TimeSpan)建構函式建構Regex物件,並呼叫實例Match(String)方法。
pattern參數包含規則運算式語言項目,以透過符號描述要比對的字串。
如需正則運算式的詳細資訊,請參閱.NET正則運算式和正則運算式語言-快速參考。
您可以藉由檢查傳Match回物件的Success屬性值,判斷在輸入字串中找到正則運算式模式。
如果找到符合的項目,則所傳回Match物件的Value屬性會包含符合規則運算式模式之input的子字串。
如果找不到相符專案,其值為String.Empty。
這個方法會傳回中input找到的第一個子字串,該子字串符合正則運算式模式。
您可以重複呼叫傳Match回物件的方法,以擷取後續相符NextMatch專案。
您也可以藉由呼叫Regex.Matches(String,String,RegexOptions)方法來擷取單一方法呼叫中的所有相符專案。
參數matchTimeout會指定模式比對方法在逾時之前應該嘗試尋找相符專案的時間長度。
設定逾時間隔可防止依賴過多回溯的正則運算式在處理包含接近相符專案的輸入時停止回應。
如需詳細資訊,請參閱正則運算式和回溯的最佳做法。
如果該時間間隔中找不到相符專案,方法會擲回RegexMatchTimeoutException例外狀況。
matchTimeout會覆寫針對方法執行所在應用程式域所定義的任何預設逾時值。
給呼叫者的注意事項
我們建議您將matchTimeout參數設定為適當的值,例如兩秒。
如果您藉由指定InfiniteMatchTimeout來停用逾時,正則運算式引擎會提供稍微更好的效能。
不過,您應該只在下列情況下停用逾時:
當正則運算式處理的輸入衍生自已知且受信任的來源,或由靜態文字所組成時。
這不包括使用者動態輸入的文字。
當正則運算式模式經過徹底測試,以確保其有效率地處理相符專案、非相符專案和接近相符專案。
當正則運算式模式未包含已知在處理接近相符專案時造成過多回溯的語言專案時。
另請參閱
規則運算式語言-快速參考
適用於
Match(String)
在指定的輸入字串中,搜尋符合Regex建構函式中所指定規則運算式的第一個項目。
public:
System::Text::RegularExpressions::Match^Match(System::String^input);
publicSystem.Text.RegularExpressions.MatchMatch(stringinput);
memberthis.Match:string->System.Text.RegularExpressions.Match
PublicFunctionMatch(inputAsString)AsMatch
參數
input
String
用來搜尋比對的字串。
傳回
Match
物件,包含符合之項目的相關資訊。
例外狀況
ArgumentNullException
input為null。
RegexMatchTimeoutException
發生逾時。
如需逾時的詳細資訊,請參閱<備註>一節。
範例
下列範例會尋找字串中的正則運算式模式相符專案,然後列出相符的群組、擷取和擷取位置。
#using
startat
Int32
要開始搜尋之以零起始的字元位置。
傳回
Match
物件,包含符合之項目的相關資訊。
例外狀況
ArgumentNullException
input為null。
ArgumentOutOfRangeException
startat小於零或大於input的長度。
RegexMatchTimeoutException
發生逾時。
如需逾時的詳細資訊,請參閱<備註>一節。
備註
方法Match(String,Int32)會傳回符合輸入字串中字元位置開頭或之後startat正則運算式模式的第一個子字串。
方法搜尋的正則運算式模式Match(String,Int32)是由呼叫其中Regex一個類別建構函式所定義。
如需用來建立正則運算式模式之語言專案的資訊,請參閱正則運算式語言-快速參考。
參數startat
您可以選擇性地使用startat參數,在字串中指定起始位置。
在字串之前startat開始的任何相符專案都會被忽略。
如果您未指定起始位置,搜尋會從預設位置開始,這是從左至右搜尋的左端input,以及從右至左搜尋的右端input。
儘管從startat開始,任何傳回相符專案的索引都是相對於字串開頭。
雖然正則運算式引擎不會在之前startat傳回任何相符專案,但不會忽略之前的startat字串。
這表示錨點或外觀後置判斷提示等判斷提示仍會套用至整個輸入。
例如,下列程式碼包含一個模式,其中包含符合的外觀提示判斷提示,即使它在輸入字串中的索引5之前startat也一樣。
usingSystem;
usingSystem.Text.RegularExpressions;
namespaceExamples
{
publicclassExample3
{
publicstaticvoidMain()
{
stringinput="Zipcode:98052";
varregex=newRegex(@"(?<=Zipcode:)\d{5}");
Matchmatch=regex.Match(input,5);
if(match.Success)
Console.WriteLine("Matchfound:{0}",match.Value);
}
}
}
//Thiscodeprintsthefollowingoutput:
//Matchfound: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,則不擲回任何例外狀況。
另請參閱
NextMatch()
規則運算式語言-快速參考
適用於
Match(String,String)
在指定的輸入字串中搜尋所指定規則運算式的第一個相符項目。
public:
staticSystem::Text::RegularExpressions::Match^Match(System::String^input,System::String^pattern);
publicstaticSystem.Text.RegularExpressions.MatchMatch(stringinput,stringpattern);
staticmemberMatch:string*string->System.Text.RegularExpressions.Match
PublicSharedFunctionMatch(inputAsString,patternAsString)AsMatch
參數
input
String
用來搜尋比對的字串。
pattern
String
要比對的規則運算式模式。
傳回
Match
物件,包含符合之項目的相關資訊。
例外狀況
ArgumentException
發生規則運算式剖析錯誤。
ArgumentNullException
input或pattern為null。
RegexMatchTimeoutException
發生逾時。
如需逾時的詳細資訊,請參閱<備註>一節。
範例
下列範例會Match(String,String)呼叫方法來尋找包含至少一個字元的第一個z單字,然後呼叫Match.NextMatch方法來尋找任何其他相符專案。
usingSystem;
usingSystem.Text.RegularExpressions;
namespaceExamples
{
publicclassExample
{
publicstaticvoidMain()
{
stringinput="ablazebeaglechoraldozenelementaryfanatic"+
"glazehungerineptjazzkitchenlemonminus"+
"nightopticalpizzaquizrestorationstamina"+
"trainunrestverticalwhizxrayyellowzealous";
stringpattern=@"\b\w*z+\w*\b";
Matchm=Regex.Match(input,pattern);
while(m.Success)
{
Console.WriteLine("'{0}'foundatposition{1}",m.Value,m.Index);
m=m.NextMatch();
}
}
}
}
//Theexampledisplaysthefollowingoutput:
//'ablaze'foundatposition0
//'dozen'foundatposition21
//'glaze'foundatposition46
//'jazz'foundatposition65
//'pizza'foundatposition104
//'quiz'foundatposition110
//'whiz'foundatposition157
//'zealous'foundatposition174
ImportsSystem.Text.RegularExpressions
ModuleExample
PublicSubMain()
DiminputAsString="ablazebeaglechoraldozenelementaryfanatic"+
"glazehungerineptjazzkitchenlemonminus"+
"nightopticalpizzaquizrestorationstamina"+
"trainunrestverticalwhizxrayyellowzealous"
DimpatternAsString="\b\w*z+\w*\b"
DimmAsMatch=Regex.Match(input,pattern)
DoWhilem.Success
Console.WriteLine("'{0}'foundatposition{1}",m.Value,m.Index)
m=m.NextMatch()
Loop
EndSub
EndModule
'Theexampledisplaysthefollowingoutput:
'ablaze'foundatposition0
'dozen'foundatposition21
'glaze'foundatposition46
'jazz'foundatposition65
'pizza'foundatposition104
'quiz'foundatposition110
'whiz'foundatposition157
'zealous'foundatposition174
規則運算式模式\b\w*z+\w*\b的解譯方式如下表所示。
模式
描述
\b
開始字緣比對。
\w*
比對零、一或多個文字字元。
z+
比對一或多個出現的z字元。
\w*
比對零、一或多個文字字元。
\b
結束字緣比對。
備註
方法Match(String,String)會傳回符合輸入字串中正則運算式模式的第一個子字串。
如需用來建立正則運算式模式之語言專案的資訊,請參閱正則運算式語言-快速參考。
靜態Match(String,String)方法相當於使用指定的正則運算式模式建構Regex物件,並呼叫實例Match(String)方法。
在此情況下,正則運算式引擎會快取正則運算式模式。
pattern參數包含規則運算式語言項目,以透過符號描述要比對的字串。
如需正則運算式的詳細資訊,請參閱.NET正則運算式和正則運算式語言-快速參考。
您可以藉由檢查傳Match回物件的Success屬性值,判斷在輸入字串中是否找到正則運算式模式。
如果找到符合的項目,則所傳回Match物件的Value屬性會包含符合規則運算式模式之input的子字串。
如果找不到相符專案,其值為String.Empty。
這個方法會傳回中input符合正則運算式模式的第一個子字串。
您可以重複呼叫傳Match回物件的方法,以擷取後續相符專案Match.NextMatch。
您也可以呼叫Regex.Matches(String,String)方法來擷取單一方法呼叫中的所有相符專案。
如果比對作業的執行時間超出為呼叫方法的應用程式定義域指定的逾時間隔,就會擲回RegexMatchTimeoutException例外狀況。
如果在應用程式定義域的屬性中未定義任何逾時,或逾時值是Regex.InfiniteMatchTimeout,則不擲回任何例外狀況。
給呼叫者的注意事項
這個方法的逾時間隔等於呼叫這個方法的應用程式定義域的預設逾時值。
如果未針對應用程式定義域定義逾時值,則使用值InfiniteMatchTimeout,使方法不會逾時。
用來擷取模式比Match(String,String)對的建議靜態方法是,可讓您設定逾時間隔。
另請參閱
NextMatch()
規則運算式語言-快速參考
適用於
Match(String,Int32,Int32)
從指定的開始位置開始並且僅搜尋指定數目的字元,在輸入字串中搜尋規則運算式的第一個相符項目。
public:
System::Text::RegularExpressions::Match^Match(System::String^input,intbeginning,intlength);
publicSystem.Text.RegularExpressions.MatchMatch(stringinput,intbeginning,intlength);
memberthis.Match:string*int*int->System.Text.RegularExpressions.Match
PublicFunctionMatch(inputAsString,beginningAsInteger,lengthAsInteger)AsMatch
參數
input
String
用來搜尋比對的字串。
beginning
Int32
定義要搜尋的最左邊位置的輸入字串中以零為起始的字元位置。
length
Int32
子字串中要包含在搜尋中的字元數。
傳回
Match
物件,包含符合之項目的相關資訊。
例外狀況
ArgumentNullException
input為null。
ArgumentOutOfRangeException
beginning小於零或大於input的長度。
-或-
length小於零或大於input的長度。
-或-
beginning+length-1識別input範圍之外的位置。
RegexMatchTimeoutException
發生逾時。
如需逾時的詳細資訊,請參閱<備註>一節。
備註
方法Match(String,Int32,Int32)會傳回符合輸入字串一部分之正則運算式模式的第一個子字串。
如需用來建置正則運算式模式之語言專案的資訊,請參閱正則運算式語言-快速參考。
方法搜尋的正則運算式模式Match(String,Int32,Int32)是由呼叫其中Regex一個類別建構函式所定義。
如需可形成正則運算式模式之專案的詳細資訊,請參閱正則運算式語言-快速參考。
方法會Match(String,Int32,Int32)搜尋和length參數所beginning定義的部分input,以取得正則運算式模式。
beginning一律會定義要包含在搜尋中最左邊字元的索引,並length定義要搜尋的最大字元數。
它們會一起定義搜尋的範圍。
行為與有效input.Substring(beginning,length)一樣input,不同之處在于,任何相符專案的索引都會相對於的input開頭計算。
這表示模式開頭或結尾的任何錨點或零寬度判斷提示的行為就像沒有超出此範圍一樣input。
例如,錨點、和會在和$上滿足beginning,而且\z會在滿足beginning+length-1。
\A\G^
如果搜尋從左至右(預設),則正則運算式引擎會從索引beginning處的字元搜尋到索引beginning+length-1處的字元。
如果使用選項具現化RegexOptions.RightToLeft正則運算式引擎,讓搜尋從右至左繼續,則正則運算式引擎會從索引beginning+length-1處的字元搜尋至索引beginning處的字元。
這個方法會傳回它在此範圍內找到的第一個相符專案。
您可以重複呼叫傳Match回物件的方法,以擷取後續相符Match.NextMatch專案。
您可以藉由檢查傳Match回物件的Success屬性值,判斷在輸入字串中找到正則運算式模式。
如果找到符合的項目,則所傳回Match物件的Value屬性會包含符合規則運算式模式之input的子字串。
如果找不到相符專案,其值為String.Empty。
如果比對作業的執行時間超出RegexMatchTimeoutException建構函式所指定的逾時間隔,就會擲回Regex.Regex(String,RegexOptions,TimeSpan)例外狀況。
如果您在呼叫建構函式時未設定逾時值,如果作業超過為建立物件的應用程式域Regex所建立的任何逾時值,就會擲回例外狀況。
如果在Regex建構函式呼叫或應用程式定義域的屬性中未定義任何逾時,或逾時值是Regex.InfiniteMatchTimeout,則不擲回任何例外狀況。
另請參閱
NextMatch()
規則運算式語言-快速參考
適用於
Match(String,String,RegexOptions)
使用指定的比對選項,在輸入字串中搜尋所指定規則運算式的第一個相符項目。
public:
staticSystem::Text::RegularExpressions::Match^Match(System::String^input,System::String^pattern,System::Text::RegularExpressions::RegexOptionsoptions);
publicstaticSystem.Text.RegularExpressions.MatchMatch(stringinput,stringpattern,System.Text.RegularExpressions.RegexOptionsoptions);
staticmemberMatch:string*string*System.Text.RegularExpressions.RegexOptions->System.Text.RegularExpressions.Match
PublicSharedFunctionMatch(inputAsString,patternAsString,optionsAsRegexOptions)AsMatch
參數
input
String
用來搜尋比對的字串。
pattern
String
要比對的規則運算式模式。
options
RegexOptions
列舉值的位元組合,提供用於比對的選項。
傳回
Match
物件,包含符合之項目的相關資訊。
例外狀況
ArgumentException
發生規則運算式剖析錯誤。
ArgumentNullException
input或pattern為null。
ArgumentOutOfRangeException
options不是RegexOptions值的有效位元組合。
RegexMatchTimeoutException
發生逾時。
如需逾時的詳細資訊,請參閱<備註>一節。
範例
下列範例會定義正則運算式,以字母「a」開頭的字組。
它會使用RegexOptions.IgnoreCase選項來確保正則運算式會找出開頭為大寫「a」和小寫「a」的字組。
usingSystem;
usingSystem.Text.RegularExpressions;
namespaceExamples
{
publicclassExample2
{
publicstaticvoidMain()
{
stringpattern=@"\ba\w*\b";
stringinput="Anextraordinarydaydawnswitheachnewday.";
Matchm=Regex.Match(input,pattern,RegexOptions.IgnoreCase);
if(m.Success)
Console.WriteLine("Found'{0}'atposition{1}.",m.Value,m.Index);
}
}
}
//Theexampledisplaysthefollowingoutput:
//Found'An'atposition0.
ImportsSystem.Text.RegularExpressions
ModuleExample
PublicSubMain()
DimpatternAsString="\ba\w*\b"
DiminputAsString="Anextraordinarydaydawnswitheachnewday."
DimmAsMatch=Regex.Match(input,pattern,RegexOptions.IgnoreCase)
Ifm.SuccessThen
Console.WriteLine("Found'{0}'atposition{1}.",m.Value,m.Index)
EndIf
EndSub
EndModule
'Theexampledisplaysthefollowingoutput:
'Found'An'atposition0.
規則運算式模式\ba\w*\b的解譯方式如下表所示。
模式
描述
\b
開始字緣比對。
a
比對字元「a」。
\w*
比對零、一或多個字字元。
\b
結束字緣比對。
備註
方法Match(String,String,RegexOptions)會傳回符合輸入字串中正則運算式模式的第一個子字串。
如需用來建置正則運算式模式之語言專案的資訊,請參閱正則運算式語言-快速參考。
靜態Match(String,String,RegexOptions)方法相當於使用Regex(String,RegexOptions)建構函式建構Regex物件,並呼叫實例Match(String)方法。
pattern參數包含規則運算式語言項目,以透過符號描述要比對的字串。
如需正則運算式的詳細資訊,請參閱.NET正則運算式和正則運算式語言-快速參考。
您可以藉由檢查傳Match回物件的Success屬性值,判斷在輸入字串中找到正則運算式模式。
如果找到符合的項目,則所傳回Match物件的Value屬性會包含符合規則運算式模式之input的子字串。
如果找不到相符專案,其值為String.Empty。
這個方法會傳回中input找到的第一個子字串,該子字串符合正則運算式模式。
您可以重複呼叫傳Match回物件的方法,以擷取後續相符NextMatch專案。
您也可以藉由呼叫Regex.Matches(String,String,RegexOptions)方法來擷取單一方法呼叫中的所有相符專案。
如果比對作業的執行時間超出為呼叫方法的應用程式定義域指定的逾時間隔,就會擲回RegexMatchTimeoutException例外狀況。
如果在應用程式定義域的屬性中未定義任何逾時,或逾時值是Regex.InfiniteMatchTimeout,則不擲回任何例外狀況。
給呼叫者的注意事項
這個方法的逾時間隔等於呼叫這個方法的應用程式定義域的預設逾時值。
如果未針對應用程式定義域定義逾時值,則使用值InfiniteMatchTimeout,使方法不會逾時。
用來擷取模式比Match(String,String)對的建議靜態方法是,可讓您設定逾時間隔。
另請參閱
NextMatch()
規則運算式語言-快速參考
適用於
本文內容
延伸文章資訊
- 14.8 Regular Expressions - Racket Documentation
If a character regexp is used with a byte string or input port, it matches UTF-8 encodings (see E...
- 2Python RegEx: re.match(), re.search(), re.findall() with Example
- 3Regex.Match 方法(System.Text.RegularExpressions)
在輸入字串搜尋規則運算式的項目,並傳回正確結果為單一Match 物件。 ... IgnoreCase); // Match the regular expression pattern agai...
- 4RegExr: Learn, Build, & Test RegEx
Regular expression tester with syntax highlighting, PHP / PCRE & JS Support, contextual help, che...
- 5REGEXMATCH - Google 文件編輯器說明
REGEXMATCH. 某段文字是否符合規則運算式。 用法示範. REGEXMATCH("Spreadsheets", "S.r") ...