System.Text.RegularExpressions.Regex.Match メソッド

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このメソッドは Match(String, Int32) 、正規表現パターンに一致する最初の部分文字列を、文字位置以降の startat 入力文字列で返します。 メソッドが検索する Match(String, Int32) 正規表現パターンは、クラス コンストラクターの Regex 1 つを呼び出すことによって定義されます。 正規表現パターンの作成に使用する言語要素の詳細については、「正規表現言語 - クイック リファレンス」を参照してください

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 から開始するように制約^されているため、1 行の検索では一致が見つかりません。
  • アンカー\G次の位置でstartat満たされます。 このため、文字列内の特定の文字位置で正確に開始するように一致を制限する場合は、左から右のパターンに対して正規表現を左に固定 \G します。 これにより、一致が制限されるため、正確に startat 開始する必要があります (または、複数の一致が必要な場合は、一致が連続します)。

右から左への検索

右から左への検索、つまり、正規表現パターンがオプションを使用して RegexOptions.RightToLeft 構築されると、次の方法で動作します。

  • スキャンは反対方向に移動し、パターンは背面 (右) から前面 (左) に一致します。
  • 既定の開始位置は、入力文字列の右端です。
  • 指定した場合 startat 、右から左へのスキャンは startat 文字 - 1 (ではなく startat) で始まります。
  • パターンの \G 右端にアンカーを指定すると、(最初の) 一致が -1 で正確に startat 終了するように制限されます。

右から左への検索の詳細については、「右から左へのモード」を参照してください

一致が見つかったかどうかを判断する

返されたMatchオブジェクトSuccessのプロパティの値をチェックすることで、入力文字列に正規表現パターンが見つかったかどうかを確認できます。 一致が見つかった場合、返される Match オブジェクトの Value プロパティには、正規表現パターンに一致する部分文字列 input が含まれます。 一致するものが見つからない場合、その値は String.Empty.

最初または複数の一致

このメソッドは、正規表現パターンに一致する文字位置の前後 startat に見つかった最初の input 部分文字列を返します。 返された Match オブジェクトのメソッドを繰り返し呼び出すことで、後続の Match.NextMatch 一致を取得できます。 メソッドを呼び出すことで、1 回のメソッド呼び出しですべての一致を Regex.Matches(String, Int32) 取得することもできます。

タイムアウト例外

RegexMatchTimeoutException 致する操作の実行時間がコンストラクターで指定されたタイムアウト間隔を超えると、例外が Regex.Regex(String, RegexOptions, TimeSpan) スローされます。 コンストラクターを呼び出すときにタイムアウト間隔を設定しない場合は、オブジェクトが作成されるアプリケーションで確立されたタイムアウト値を操作が超えた場合メインRegex例外がスローされます。 コンストラクター呼び出しまたはアプリケーションでRegexタイムアウトが定義されていない場合はメインのプロパティ、またはタイムアウト値が指定されている場合はRegex.InfiniteMatchTimeout、例外はスローされません。