2012-02-08 5 views
4

これは、独自のデータ文字列からキー/値ペアの配列を返す非常に複雑な正規表現です。エクスプレスが.Netで使用できず、別の方法を使用する必要がある場合のデータのサンプルです。このPHP RegExマッチパターンを.NETに変換する方法

0,"101"1,"12345"11,"ABC Company"12,"John Doe"13,"123 Main St"14,""15,"Malvern"16,"PA"17,"19355"19,"UPS"21,"10"22,"GND"23,""24,"082310"25,""26,"0.00"29,"1Z1235550300000645"30," PA 193 9-05"34,"6.55"37,"6.55"38,"8.05"65,"1Z1235550300000645"77,"10"96,""97,""98 

よく見ると、あなたがkey、そのkey、「value」を参照してください、「value」は、フォーマット上の唯一の保証は、各キーと値のペアはカンマで区切られていることであり、各値は常にに包まれます二重引用符。主な問題(あなたがそれを爆発させることができない理由)は、キーと値をエントリと同じ文字で区切るための前のコーダの貧弱な選択です。とにかく、私の手の中から。ここでは動作するPHPの例を示します。また、

Dim RegexObj As New Regex("(.*?),""(.*?)""") 

function parseResponse($response) { 
    // split response into $key, $value pieces 
    preg_match_all("/(.*?),\"(.*?)\"/", $response, $m); 

    // loop through pieces and format 
    foreach($m[1] as $index => $key) { 
      $value = $m[2][$index] 
       echo $key . ":" . $value; 
     // this will output KEY:VALUE for each entry in the string 
      } 
    } 

あなたは

Imports System.Text.RegularExpressions 
Public Class Parser 
    Private Sub parseResponse(ByVal response As String) 
     Dim regExMatch As Match = Regex.Match(response, "/(.*?),\""(.*?)\""/") 

    End Sub 
End Class 

答えて

3

あなたはPHPの区切り文字を削除する必要がVB .NETで私が持っているものの式ここで/(.*?),\"(.*?)\"/

をされて見ることができますどのようなものがマッチするかについてより具体的にする方が良いでしょう。(正規表現をはるかに効率的にする)

Dim RegexObj As New Regex("([^,]*),""([^""]*)""") 

最初のグループはカンマではない文字と一致し、2番目のグループは引用符ではない文字にのみ一致します。ちなみに、あなたのデータに引用符をエスケープする場合、両方の正規表現は失敗します。これが正しく動作していない文字列中のすべての一致を得るために

は、

AllMatchResults = RegexObj.Matches(response) 
+0

を使用し、それが唯一の最初の項目を返すようですが、私は運と/それぞれのために試してみました。 PHPの例のように、これらのキー/値のペアを1つずつ処理する必要があります。 –

+0

@MikeL .: '.Match()'メソッドではなく '.Matches()'メソッドが必要です。 –

+0

ありがとう!私たちは同時にそれを見つけました...各自のためにマッチマッチ –

関連する問題