トップ回答者
文字置換

質問
回答
-
変数を使う場合は正規表現の特殊変数に使われる文字「$」を「`」でエスケープし、''ではなく""で文字列を括ると良いと思います。
例:
gc filename | %{$_ -replace '(^[0-9]*)(,)',"`$1`$2$test"}
特殊変数$1,$2...の後に数値を続けて書く方法はちょっと分かりませんが、この例だと正規表現を一部書き換えた上で、「$&」という「マッチした文字列」を格納する特殊変数を用いることで解決します。
例:
gc filename | %{$_ -replace '^[0-9]*,','$&20010909'}
- 回答としてマーク TAKAKUN 2010年9月17日 3:54
-
>「$&」とはどういう意味なんでしょうか。確かに同じ結果になったのですが・・・
「マッチした文字列全体」を意味します。
たとえば"2222,3333"という文字列に"^[0-9]*,"という正規表現を適用すると、"2222,"という文字列がマッチします。そのため、「$&」には"2222,"が格納されます。
>この「一般変数と同様に」のくだりがわかりません。
PowerShellの変数名で使えない文字(数字など)も{}を使えば使えます。
たとえば、
${1}=2
とすると
${1}には「2」が格納されます。
同様のことが正規表現の後方置換で使う特殊変数でも可能ということですね。
すなわち、
'${1}${2}20010909'
"`${1}`${2}$test" ($testに数値が入っていてもOK)などが可能になるということです。これは私も知りませんでした。
- 回答としてマーク TAKAKUN 2010年9月17日 3:54
-
> PowerShellの変数名で使えない文字(数字など)も{}を使えば使えます。
微妙にニュアンスが違うかも?
PowerShell では、変数名に様々な文字が使えますが、PowerShell は通常は文脈から変数名の終わりを自動的に判断します。
たとえば、"$abc 3" と記載すると 「abc という変数、3 という文字」と判定されますが、"$abc3" と記載すると 「abc3 という変数」と判断されます。これを「変数名は abc までですよ」と明示するのが ${abc} という書き方です。"${abc}3" と記載すると「abc という変数、3 という文字」と判定されるようになります。
最初の話にもどって、'$1$220010909' という記載をおこなった場合、PowerShell では「1 という変数」「220010909 という変数」と判定されますので、{ } を利用して '$1${2}20010909' と記載する必要があります。
という話でした。
同様に、変数名にスペースを含めたり演算する場合などにも { } による変数名の範囲の明示が利用できます。
- 回答としてマーク TAKAKUN 2010年9月17日 3:54
すべての返信
-
変数を使う場合は正規表現の特殊変数に使われる文字「$」を「`」でエスケープし、''ではなく""で文字列を括ると良いと思います。
例:
gc filename | %{$_ -replace '(^[0-9]*)(,)',"`$1`$2$test"}
特殊変数$1,$2...の後に数値を続けて書く方法はちょっと分かりませんが、この例だと正規表現を一部書き換えた上で、「$&」という「マッチした文字列」を格納する特殊変数を用いることで解決します。
例:
gc filename | %{$_ -replace '^[0-9]*,','$&20010909'}
- 回答としてマーク TAKAKUN 2010年9月17日 3:54
-
>「$&」とはどういう意味なんでしょうか。確かに同じ結果になったのですが・・・
「マッチした文字列全体」を意味します。
たとえば"2222,3333"という文字列に"^[0-9]*,"という正規表現を適用すると、"2222,"という文字列がマッチします。そのため、「$&」には"2222,"が格納されます。
>この「一般変数と同様に」のくだりがわかりません。
PowerShellの変数名で使えない文字(数字など)も{}を使えば使えます。
たとえば、
${1}=2
とすると
${1}には「2」が格納されます。
同様のことが正規表現の後方置換で使う特殊変数でも可能ということですね。
すなわち、
'${1}${2}20010909'
"`${1}`${2}$test" ($testに数値が入っていてもOK)などが可能になるということです。これは私も知りませんでした。
- 回答としてマーク TAKAKUN 2010年9月17日 3:54
-
> PowerShellの変数名で使えない文字(数字など)も{}を使えば使えます。
微妙にニュアンスが違うかも?
PowerShell では、変数名に様々な文字が使えますが、PowerShell は通常は文脈から変数名の終わりを自動的に判断します。
たとえば、"$abc 3" と記載すると 「abc という変数、3 という文字」と判定されますが、"$abc3" と記載すると 「abc3 という変数」と判断されます。これを「変数名は abc までですよ」と明示するのが ${abc} という書き方です。"${abc}3" と記載すると「abc という変数、3 という文字」と判定されるようになります。
最初の話にもどって、'$1$220010909' という記載をおこなった場合、PowerShell では「1 という変数」「220010909 という変数」と判定されますので、{ } を利用して '$1${2}20010909' と記載する必要があります。
という話でした。
同様に、変数名にスペースを含めたり演算する場合などにも { } による変数名の範囲の明示が利用できます。
- 回答としてマーク TAKAKUN 2010年9月17日 3:54