6

.NET の RegEx におけるGroupMatchの違いは何ですか?

4

2 に答える 2

7

Matchは、ターゲット テキスト (の一部) に一致した特定の正規表現を示すオブジェクトです。元の正規表現にグループ マーカー (基本的には括弧内のパターン) が含まれている場合、グループは一致の一部を示します。たとえば、次のコードを使用します。

string text = "One car red car blue car";
string pat = @"(\w+)\s+(car)";
Match m = r.Match(text);

m(\w+)は、2 つのグループ(「One」をキャプチャしたグループ 1 の from(car)と、「車」に一致したグループ 2 (from )) を含む一致オブジェクトになります。

于 2008-08-26T22:33:04.000 に答える
2

Match は、正規表現に一致する文字列の一部であるため、文字列内に複数の一致が存在する可能性があります。

マッチ内で、匿名または名前付きのグループを定義して、マッチを分割しやすくすることができます。簡単な例は、正規表現を作成して URL を検索し、内部でグループを使用してプロトコル (http)、ドメイン (www.web.com)、パス (/lol/cats.html)、および引数などを検索することです。

// Example I made up on the spot, probably doesn't work very well
"(?<protocol>\w+)://(?<domain>[^/]+)(?<path>/[^?])"

前述したように、1 つのパターンが文字列内で複数回見つかる可能性があるため、Regex.Matches(string text) を使用すると、それぞれがゼロ、1 つ、または複数のグループで構成される複数の一致が返されます。

これらの名前付きグループは、番号または文字列によるインデックス付けによって見つけることができます。上記の例は、次のように使用できます。

Match match = pattern.Match(urls);
if (!match.Success) 
    continue;
string protocol = match.Groups["protocol"].Value;
string domain = match.Groups[1].Value;

さらに興味深いことに、1 つのグループが複数回一致する可能性もありますが、ドキュメントを読み始めることをお勧めします。

グループを使用して後方参照を生成したり、部分的な検索と置換を行ったりすることもできますが、詳細についてはMSDNを参照してください。

于 2008-08-26T22:58:42.847 に答える