質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

767閲覧

POWERSHELLの正規表現を用いた置換で数字をエスケープしたい

hplpjpd

総合スコア20

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2022/03/19 03:35

前提

ここに質問の内容を詳しく書いてください。
(例)
閲覧ありがとうございます。
powershellでファイル内の文字列の末尾に00を付与したいですが、
うまく置換できません。
対応策をご存じの方がいらっしゃいましたら、ご教授お願い致します。

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・ファイル内の文字列を下記のように置換したいです。

# DamageLow = 250 → DamageLow = 25000 # DamageHigh = 250 → DamageHigh = 25000 # DamageLow = 0 → DamageLow = 0 ※置換しない

発生している問題・エラーメッセージ

なし

該当のソースコード

PowerShell

1$file_contents = $(Get-Content 'C:\Program Files (x86)\Steam\steamapps\common\Hades\Content\Game\Projectiles\PlayerProjectiles.sjson') -replace '(Damage(Low|High) = [1-9][0-9]*)','$100' 2$file_contents > 'C:\Program Files (x86)\Steam\steamapps\common\Hades\Content\Game\Projectiles\PlayerProjectiles.sjson' 3# 意図しない置換結果: DamageLow = 250 → $100 4 5$file_contents = $(Get-Content 'C:\Program Files (x86)\Steam\steamapps\common\Hades\Content\Game\Projectiles\PlayerProjectiles.sjson') -replace '(Damage(Low|High) = [1-9][0-9]*)','$1\00' 6$file_contents > 'C:\Program Files (x86)\Steam\steamapps\common\Hades\Content\Game\Projectiles\PlayerProjectiles.sjson' 7# 意図しない置換結果: DamageLow = 250 → DamageLow = 250\00

(置換対象ファイル(PlayerProjectiles.sjson)を一部抜粋)

DamageLow = 2500 DamageHigh = 2500 DamageRadius = 100.0 DamageRadiusScaleY = 0.65 UseVulnerability = true NumPenetrations = 999 SilentImpactOnInvulnerable = true AffectsEnemies = true AffectsFriends = false AffectsSelf = false CheckUnitImpact = false CheckObstacleImpact = false Fuse = 0.01 ImmunityDuration = 0.1 UseRadialImpact = false } { Name = "RamWeapon" DetonateSound = "null" DetonateGraphic = "BlinkTrailVerticalB" Type = "STRAIGHT" Fuse = 0.075 Range = 250 DamageLow = 0 DamageHigh = 0 DamageRadius = 1.0

試したこと

なし

補足情報(FW/ツールのバージョンなど)

Name Value ---- ----- PSVersion 5.1.19041.1320 PSEdition Desktop PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 10.0.19041.1320 CLRVersion 4.0.30319.42000 WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次の引用は参考になりますでしょうか。

For example, you can use the replacement string ${1}1 instead of $11 to define the replacement string as the value of the first captured group along with the number "1".
例えば、$11の代わりに${1}1という置換文字列を使うと、数字「1」とともに、最初に取り込んだグループの値として置換文字列を定義することができます。
https://docs.microsoft.com/en-us/dotnet/standard/base-types/substitutions-in-regular-expressions#substituting-a-numbered-group

投稿2022/03/19 05:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hplpjpd

2022/03/19 13:01

ご回答ありがとうございます。ご教授いただいた指定方法が-replace 演算子でも機能し、実現できました。 [code] $file_contents = $(Get-Content 'C:\Program Files (x86)\Steam\steamapps\common\Hades\Content\Game\Projectiles\PlayerProjectiles.sjson') -replace '(Damage(Low|High) = [1-9][0-9]*)','${1}00' $file_contents > 'C:\Program Files (x86)\Steam\steamapps\common\Hades\Content\Game\Projectiles\PlayerProjectiles.sjson' [/code]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問