2017-03-08 11 views
1

で動作します:以前は正規表現が現在動作していないテストされ、私は次のようしている正規表現テスター

 var exp = new Regex("(.+):(.+)-(.+)"); 
     var matches = exp.Matches("AR1:CP1-CP2"); 

私はhttp://regexstorm.net/testerに行くとき、これは動作します:

enter image description here

そして、私は確信しています私は動作していたテストコードをいくつか持っていましたが、今はC#アプリケーション(これは上の正確なコードです)で実行すると、入力文字列が1つしか得られず、その後のコードがクラッシュします。

enter image description here

私はむしろ私は途方に暮れてよそれ以外でコードを書いたが、VS2013よりも、VS 2015上で、今日のコーディングしています。誰かがこれを理解できますか?

+0

正規表現を '([^:] +) ] +) - (。+) 'を使用してバックトラッキングを回避します。 – dasblinkenlight

答えて

3

もちろん、あなたは1つのマッチを得る。正規表現は一度だけマッチします。しかし、マッチ自体には3つのグループがあります(暗黙的にグループ0であるマッチ全体をカウントする4つのグループがあります)。

PS Home:\> [regex]::matches('AR1:CP1-CP2', '(.+):(.+)-(.+)') 


Groups : {AR1:CP1-CP2, AR1, CP1, CP2} 
Success : True 
Captures : {AR1:CP1-CP2} 
Index : 0 
Length : 11 
Value : AR1:CP1-CP2 
+0

私のコードがどのように動作していたのか、私はとても混乱しています。私が本当に不気味な夢を持っていて夢を見ない限り、私は自分のコードを完成させました...しかし、数ヶ月間チェックインされました!奇妙な... –

+0

私はテストの強い思い出を持っているこの全体のクラスを持っていますが、それは動作しません、私は何が起こったのか失われています... –

+0

まあ、私はこの点で正規表現の動作はしなかった任意の.NETバージョンで変更;-) – Joey

関連する問題