2011-08-17 17 views
0

を使用して文字列から、私はfolowsなどのような文字列持つ2 []の間の値を取得する:経由正規表現

"channel_changes":[[1313571300,26.879846,true],[1313571360,26.901025,true]] 
私は 131357130026.879846のように角度ブレース内の各文字列を抽出したい

true

を正規表現。

私は

string regexPattern = @"\[(.*?)\]"; 

を使用して試してみましたが、それは1つの余分な角度ブレースと[[1313571420,26.901025,true] すなわちとして最初の文字列を与えます。

私はこれをどのように達成することができますか教えてください。

答えて

1

これは私のためのExpressoで動作するように見えた:

\[([\w,\.]*?)\] 

リテラル[
[1]:番号をキャプチャグループ。 [[\、W] *。?]
- このクラスの任意の文字:[\ ,. W]、繰り返しの任意の数、問題があることを思え

]
可能リテラル限り少ないです"。"あなたの正規表現で - それは最初のリテラル "["を取っていたので、あなたの入力で次の "["が次の文字として有効であると考えています。

私はそれをあなたの例にあったすべてのものなので、英数字、カンマ、リテラルフルストップ(ピリオドマーク)に制限しました。あなたはさらに行くと、本当にそれは一貫だと仮定すると、それらの内側の角括弧内のデータの形式を指定して、より多くのこのようなもので終わる可能性:

\[[0-9.]+,[0-9.]+,(true|false)\] 

例C#コード:

var matches = Regex.Matches("\"channel_changes\":[[1313571300,26.879846,true],[1313571360,26.901025,true]]", @"\[([\w,\.]*?)\]"); 

foreach (var match in matches) 
{ 
    Console.WriteLine(match); 
} 
+0

.NETで5つの一致が返されます.3番目はカンマシンボル '、' 5番目は ']'です。 – sll

+0

は.NETで動作しません。 – CuriousBuddy

+0

.NETで動作しないのはなぜですか? '[regex] :: matches( 'channel_changes':[1313571300,26.879846、true]、[1313571360,26.901025、true]] '、' \ [([\ w、\。] *?)\] ') ' –

0

"[^]] +"

@"\[+([^\]]+)\]+" 

- それは、右角カッコ

012以外の任意の文字を意味します。これを試してみてください
0

ここonline on Regexr

[^\[\]]*それを参照してください。この

\[([^\[\]]*)\] 

を試してみてください否定文字クラスで、任意の文字が、[]に一致することを意味します。この構成では、*を違法にするために?は必要ありません。