Powershell RegEx geht beim match aber beim replace nicht
Servus,
das RegEx für die Logsnamen funktioniert schonmal.
Jetzt habe ich nach dem gleichen Muster versucht mir einen RegEx zusammenzubauen um $AlterWert zu ersetzen.
Ich könnte das wie oben über Get-NIVar in das PS Script schiessen mag ich aber nicht so.
Wenn ich nun mir mein RegEx hernehme: ^[a-zA-Z]{1,10}![0-9]$
Deckt er im Grunde den zu findenden String sauber ab. Getestet mit https://regex101.com/. Ergebnis --> geht
Nur das geht irgendwie nicht:
Hat einer eine Idee?
VG
das RegEx für die Logsnamen funktioniert schonmal.
$AlterWert = Get-NIVar "InstallationParameters.Wert1"
$NeuerWert = '/p="************"'
$Pfad = "D:\Temp"
$result = Get-ChildItem | Where-Object { $_.Name -match '^NI[A-Z]{1,3}32_[0-9]{1,3}\.log$' }
foreach ($file in $result)
{
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace "$AlterWert", "$NeuerWert"} |
Set-Content $file.PSPath
}
Jetzt habe ich nach dem gleichen Muster versucht mir einen RegEx zusammenzubauen um $AlterWert zu ersetzen.
Ich könnte das wie oben über Get-NIVar in das PS Script schiessen mag ich aber nicht so.
Wenn ich nun mir mein RegEx hernehme: ^[a-zA-Z]{1,10}![0-9]$
Deckt er im Grunde den zu findenden String sauber ab. Getestet mit https://regex101.com/. Ergebnis --> geht
Nur das geht irgendwie nicht:
Foreach-Object { $_ -replace "^[a-zA-Z]{1,10}![0-9]$", "$NeuerWert"} |
Hat einer eine Idee?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 348347
Url: https://administrator.de/forum/powershell-regex-geht-beim-match-aber-beim-replace-nicht-348347.html
Ausgedruckt am: 16.04.2025 um 11:04 Uhr
4 Kommentare
Neuester Kommentar

"$NeuerWert"
Im Replace-Pattern werden Dollarzeichen in Strings als Positionsparameter für Regex-Submatches interpretiert, lass die Anführungszeichen weg.
Ist ja auch Blödsinn sie vorne weg zu lassen ...

das Weglassen hinten wirft keinen Fehler
Habe ich ja oben deutlich gemacht das die hinteren gemeint waren.allerdings tauscht er mir die Strings dennoch nicht aus.
Wir kennen den Inhalt des Strings $Alterstring nicht! Zu den Positionsparametern in RegEx, das $ ist doch der Marker für das Ende des RegEx
Ja und ^ ist der Anfang des Strings, bei dir muss also alles von Anfang bis Ende matchen!oder muss ich den irgendwie escapen beim -replace?
Nein im Match part natürlich nicht.