トップ回答者
置換の構文

質問
回答
-
PowerShellの変数名は$から始まります。そしてダブルクォーテーション内では変数が展開され、中の値に置き換わります。
すなわち、後者のコードだとPowerShellの「$1」という変数の中身が展開されています。$1には特に値を代入していなければ$nullなので、
"12.37000" -replace "(\.\d\d[1-9]?)\d*",""
と等価なコードになります。
もし「$1」を""の中で正規表現の特殊変数として扱いたい場合は、「$」文字をPowerShellのエスケープ文字「`」でエスケープしてやる必要があります。
"12.37000" -replace "(\.\d\d[1-9]?)\d*","`$1"
一方でシングルクォーテーション内では変数の値は展開されません。「$」をエスケープする必要もありません。よって前者のコードは思惑通り、「$1」が正規表現の特殊変数として扱われます。
- 回答としてマーク Brillia 2011年10月31日 8:59
すべての返信
-
PowerShellの変数名は$から始まります。そしてダブルクォーテーション内では変数が展開され、中の値に置き換わります。
すなわち、後者のコードだとPowerShellの「$1」という変数の中身が展開されています。$1には特に値を代入していなければ$nullなので、
"12.37000" -replace "(\.\d\d[1-9]?)\d*",""
と等価なコードになります。
もし「$1」を""の中で正規表現の特殊変数として扱いたい場合は、「$」文字をPowerShellのエスケープ文字「`」でエスケープしてやる必要があります。
"12.37000" -replace "(\.\d\d[1-9]?)\d*","`$1"
一方でシングルクォーテーション内では変数の値は展開されません。「$」をエスケープする必要もありません。よって前者のコードは思惑通り、「$1」が正規表現の特殊変数として扱われます。
- 回答としてマーク Brillia 2011年10月31日 8:59