2011-10-06 15 views
5

これは私にとって非常に難解です。.NET Regex単一行の一致不明の文字を置換する

static void Main(string[] args) 
{ 
    String input = "test"; 
    String pattern = ".*"; 
    String replacement = "replace"; 
    Console.WriteLine(Regex.Replace(input, pattern, replacement)); 
    Console.Read(); 
} 

これは、コンソールに出力します:

replacereplace 

は、私は正規表現は、奇妙な一致エンドラインの文字を取得しますが、どれがあってはならないことを理解し、なぜ私は、次のコード内の文字列を置き換え、重複取得しています。私はパターンが何にもマッチできないことを理解していますが、明らかに入力は何もありません。これは.NET 3.5と4.0で起こり、SingleLineとMultiLineで同じことが起こります。

私は、私が期待していることをするいくつかの選択肢があると知っていますが、私は他のどのようなマッチについてさらに疑問に思っています。

答えて

4

.*を入力すると、"test"""という2つの一致が表示されるため、2つの置換えを行う理由があります。

あなたは.+.*を変更した場合、それはにあなたがそれを期待するように動作します:

String pattern = ".+"; 

別のオプションは、文字列アンカーの開始を追加することです:

String pattern = "^.*"; // I know this looks like a smiley 
+1

あなたは仕上げの行に私を持っています:) – FailedDev

+0

私は同意します、これは修正しますが、私は理由を探していました。 –

+0

@JoshuaBelden更新された回答を参照してください。 – NullUserException

2

それは何にもマッチしませんし、その後、したがって、2つのマッチと2つのマッチがあります。

+0

愚かなものはありません。そして、なぜ私はこれまでにこれに遭遇していないのですか? –

+2

@JoshuaBelden多分あなたはそれを実行したが、あなたはそれを発見したことはありません:) – FailedDev

関連する問題