2011-10-06 36 views
5

這讓我非常困惑。爲什麼我會收到重複下面的代碼替換字符串:.NET正則表達式替換單行匹配未知字符

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"""

如果更改.*.+它會工作,你期望它的方式:

String pattern = ".+"; 

另一種方法是添加字符串錨開始:

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

你讓我在終點線:) – FailedDev

+0

我同意,這確實解決了它,但我一直在尋找原因。 –

+0

@JoshuaBelden查看更新的答案。 – NullUserException

2

它匹配什麼,然後它匹配一切,因此您有兩個匹配和兩個替換。

+0

愚蠢的東西。爲什麼我以前從未遇到過這種情況? –

+2

@JoshuaBelden也許你運行過它,但你從未發現它:) – FailedDev

相關問題