C# では、次のようなコード行があります。
string[] values = Regex.Split(fielddata, @"[;]+");
これはどの値で分割されますか? @ 記号からのリテラルの混合と、ここで角括弧と + が何を意味するのか、少し混乱しています。何か案は?
C# では、次のようなコード行があります。
string[] values = Regex.Split(fielddata, @"[;]+");
これはどの値で分割されますか? @ 記号からのリテラルの混合と、ここで角括弧と + が何を意味するのか、少し混乱しています。何か案は?
@ は逐語的な文字列リテラルです。つまり、特殊文字をエスケープする必要はありません。Asad が既に述べたように、1 つ以上の連続したセミコロンで分割されます。+ は 1 つ以上を表します (正規表現文法)。
実行可能な例を次に示します: http://ideone.com/whLqUe
string input = "a;b; ;c;;;d";
string[] values = Regex.Split(input, @";+");
foreach (var value in values)
Console.WriteLine(value);
出力中
a
b
c
d
[...]
角括弧内の任意の 1 文字に一致する文字クラスです。この場合、それは冗長です。書くだけで@";+"
まったく同じ意味になります。
+
前の文字またはパターンを 1 回以上繰り返します。
したがって、これは連続して;
(可能な限り)分割されます。
逐語的な文字列 ( @"..."
) は、単に適切な方法として使用されています。正規表現内でエスケープする必要がある場合、通常の文字列を使用すると見苦しくなります。繰り返しますが、この特定の例では、 を省略しても違いはありません@
。しかし、それは慣れる価値のあるものです。
それらのブラケットは不要です。その正規表現は次と同等です。
string[] values = Regex.Split(fielddata, @";+");
任意の数のセミコロンで分割されるため"1;2;;3;;4;;;5;;6;7"
、配列が返されます。
['1', '2', '3', '4', '5', '6', '7']
split メソッドは、フィールドデータを 1 つ以上のセミコロンで分割します。@ 記号は、文字をエスケープする必要がないことを意味し、文字列は二重引用符の間にあるもののままです。
もしそうfielddata = "a;b;c;;d;e;;;f"
なら
values = ["a","b","c","d","e","f"]