2010-11-18 6 views
0

次のコードをJavaからC#に変換しようとしています。私のように変換このJava to C#変換で何が問題になっていますか?

// Replace 0 0 0 0; with 0. 
css = css.replaceAll(":0 0 0 0(;|})", ":0$1"); 

...

var foo = new Regex(":0 0 0 0(;|})", RegexOptions.IgnoreCase).Replace(foo, "XXXXXXXX"); 

これはコンパイルが、私は次のコードに対してこれを実行したときに動作しません...

foo = "a {background-position: 0 0 0 0;}\nb {BACKGROUND-POSITION: 0 0;}" 

が、私が変更された場合正規表現パターン: -

var foo = new Regex("0 0 0 0", RegexOptions.IgnoreCase).Replace(foo, "XXXXXXXX"); 

は結果を正しく変更します。今

あなたがこれを言うに行く前に、私は正規表現を渡し、対応するユニットテストでit's being used in the following (well known/popular) projectので有効であるという仮定をしたいと思いREGEXの質問ではなく、JavaのCに#変換、質問です。 Another example of this code as javascriptはそれはのような...

// Replace 0 0 0 0; with 0. 
css = css.replace(/:0 0 0 0(;|\})/g, ":0$1"); 

お知らせ最初の引数に欠落している引用符をコード化していますか?だから、もし私もjavaをC#に正しく変換していないのではないかと思っています。

+1

編集は、短いが完成した*プログラムを投稿することが有用である理由を示しています。実際のコードにはない投稿コードに間違いはありません。カット&ペーストしてください。 –

答えて

2

現時点では、あなたの正規表現には二つの問題があります。

  • あなたは文字列を探している
  • あなたはブラケットを閉じていない(または、あなたが質問を編集した前に、あなたはありませんでしたが) ":0" で始まるコロンの後にスペースがありますfooで一方は

これは正常に動作します:

using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main() 
    { 
     string foo = "a {background-position: 0 0 0 0;}\nb " 
        + "{BACKGROUND-POSITION: 0 0;}"; 
     var regex = new Regex(": 0 0 0 0(;|})", RegexOptions.IgnoreCase); 
     string replaced = regex.Replace(foo, "XXXXXXXX"); 
     Console.WriteLine(replaced); 
    } 
} 

Javaのバージョンが、実際にが "コロンの後のスペース"の問題がある場合、元の文字列に対応していれば驚きでしょう。あなたは、スペースをオプションにするために、正規表現を調整することもできます。

": ?0 0 0 0(;|})" 
+0

AHH!そのエラーは変換ではなく、使用されているcss(コロンと最初のゼロの間にスペースがあります)です。うーん。私はjavaプロジェクトの単体テストが正常に動作していると仮定しているためです。 ...上記の別のエラーが(私の変換コードでは)ない限り。乾杯ジョン - 非常に感謝:) –

+0

ああジョン、私はあなたの注意を払っている間。私は、ソースコードのjavaプロジェクトコードをステップ実行することができますか?私は.NETコードをステップ実行します。プロジェクトを変換しながら、ライン出力を行ごとに比較しますか? –

+0

@ Pure.Krome、はい、デバッガを使用してJavaコードをステップできます。私が知っているすべてのJava IDEには、デバッガが付属しています。 – tster

1
using System; 
using System.Text.RegularExpressions; 

class Test 
{ 
    static void Main() 
    { 
     string f0o = "a {background-position: 0 0 0 1;}\nb " + 
        "{BACKGROUND-POSITION: 0 0;}"; 

     var regex = new Regex(": 0 0 2 0(;})", vRegexOptions.IgnoreCase); 
     string replaced = regex.Replace(foo, "XXXXXXXX"); 
     Compile.WriteLine(replaced); 
    } 
} 

これはあなたの問題を解決する必要があります。

関連する問題