2012-04-17 16 views
13

.replaceと-replaceがまったく同じものであったという印象を受けましたが、私は再配置可能な.replaceでいくつかのRegExタスクを達成できないことがわかりました。誰かが私が逃していることを指摘してもらえますか?powershellの.replaceと-replaceの違いは何ですか?

Broken Regex replace: 
$a=$a.Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 


Working Regex replace: 
$a=$a -Replace('.:\\LOGROOT\\', "\\$env:computername\logroot\") 

PS: 次のURLは、私はに慣れていない午前.replaceのオプションがあると思いますし、私を導き、私はそれらを使用する方法についての追加情報を見つけるように見えるカント、またはこれらのヘルプにアクセスする方法オプション。 http://www.computerperformance.co.uk/powershell/powershell_regex.htm Regex.Replace(String、String、String、RegexOptions)また、 Regex.Replace(String、String、MatchEvaluator、RegexOptions)メソッドです。

ありがとうございました

+1

私は '-Replace'は演算子で、' .Replace'はメソッド( '$ a')であると思います。 –

答えて

14

@Keithヒルの答えはあなたが同じ結果が表示されない可能性がある理由を説明するために、Replace方法と-replace演算子の違いを説明しながら、あなたは文字列が置き換えられないString.Replace方法を使用しているので、それがあると-replaceオペレータは、正規表現を置き換える使用しています。あなたは、この目的のためにRegex.Replace方法を使用することができますし、同じ効果が表示されるはずです。要するに

[regex]::replace($a,'.:\\LOGROOT\\', "\\$env:computername\logroot\") 

を、-replaceオペレータは、(特定の過負荷が上記のリンク)Regex.Replaceと同じであるが、一般的Replace()内のインスタンスであるか、またはすることができます静的メソッドは完全に別のものを行うことができます-replace

9

これらは同じものではありません。 .ReplaceはSystem.String上の.NETメソッドまたはReplaceという名前のインスタンスメソッドを持つ他の型のいずれかです。 -replaceは、正規表現を使用するPowerShell演算子です。 -replaceオペレーターの詳細については、man about_operatorsを実行してください。

+3

実際、 'a -replace b、c'は.NETメソッドです。[' Regex.Replace(a、b、c、RegexOptions.IgnoreCase) '](http://msdn.microsoft.com/en/ -us/library/taz3ak2f.aspx)。 – Richard

関連する問題