1

一部のデータに対して正規表現を実行しています。$_が「置換」セクションにある場合は、コンテンツも取得します。$ replaceでさまざまなことを試しましたが、この動作を止めることができないようです。[regex] :: escape()も試しましたが、エスケープ文字だけで同じことをすることになります。

置換で$_を許容できる必要があります。私はそれを別のものにして後で修正を行うことができますが、それは醜いので、むしろ避けたいと思います。

最後に、$ replace ='$ anythingelse'が期待どおりに機能しているように見える場合、$_のみがこの問題を引き起こしているように見えます。すべての解析を無効にできれば、それも機能します。

スクリプト:

 $contents = 'foo'
 $replace = '$_ bar'
 $final = $contents -replace 'oo', $replace
 Write-Output "Contents: $contents"
 Write-Output "Replace: $replace"
 Write-Output "Final: $final"

出力:

 Contents: foo
 Replace: $_ bar
 Final: ffoo bar

システム:Windows 7、PSH 2、64ビット

だから私は何か間違ったことをしているのですか、それともこれは本当にバグですか?

6/29編集:

交換できるように交換しました。これはばかげているので、解析を無効にする方法があるはずです(これにより、実行も少し速くなります)。

 $contents = 'foo'
 $replace = '$_ bar'
 **$rep = $replace -replace '\$','$$$'**
 $final = $contents -replace 'oo', $rep
 Write-Output "Contents: $contents"
 Write-Output "Replace: $replace"
 Write-Output "Final: $final"

出力

 Contents: foo
 Replace: $_ bar
 Final: f$_ bar
4

1 に答える 1

4

問題は、置換文字列の「$_」が入力文字列全体を表すことです。文字通りのドル記号が必要な場合は、$$ を使用してエスケープする必要があります。

$replace = '$$_ bar'

詳細については、msdnの置換ページを参照してください。

質問の編集に対処するための編集 29/6

正規表現をまったく使用しない基本的な文字列置換だけが必要な場合は、代わりに標準の文字列置換を使用して-replaceください。

$final = $contents.replace('oo', $replace)
于 2012-06-29T02:10:25.660 に答える