1
なぜ正規表現は一致のマルチ値を返しますか?文字列からの一致を選択する正規表現
次のコードを参照してください。結果は1つだけ返されます。なぜ2つあるのですか?
e.g
Match m = Regex.Match("[Red] #,0.00 \"Ex\"", @"^\[(RED|GREEN|ORANGE)\]", RegexOptions.IgnoreCase);
if (m.Success)
{
Console.WriteLine(m.Groups.Count);
Console.WriteLine(m.Groups[0].Value);
Console.WriteLine(m.Groups[1].Value);
}
else
Console.WriteLine("No match");
========Result===============
2
[Red]
Red
Press any key to continue . . .
しかし:
m.Groups[1]
はあなたがすべての一致を見たい場合は、あなたがこれを行うことができます...など、最初のキャプチャです。 "^ \ [(RED)\]"を行うと "RED"と "[RED]"が一致し、 "^ \ [RED \]"しかない場合は "[RED]"に一致しますなぜ???? – jojo
'^ [(RED)]'は、行頭の文字クラスです。それは '^ [DER()]'と同義です。角括弧は、内部の文字の* 1 *に一致することを意味します。 '()DER'のいずれかの文字と一致します。だからあなたの場合、 '['と '[' '\ [(赤)\]'のようにエスケープする必要があります。 –