Quel est le meilleur moyen de supprimer tout le texte d'une chaîne après un caractère spécifique? Dans mon cas "=" et après un autre caractère dans mon cas, un ,
, mais conservez le texte entre?
= garde ça,
Une autre manière de procéder consiste à utiliser l'opérateur -replace .
$teststring = "test=keep this, but not this."
$teststring -replace ".*=" -replace ",.*"
.*=
signifie tout nombre de caractères, y compris un signe égal.
,.*
signifie une virgule suivie d'un nombre quelconque de caractères.
Étant donné que vous supprimez essentiellement ces deux parties de la chaîne, vous n'avez pas besoin de spécifier une chaîne vide pour les remplacer. Vous pouvez utiliser plusieurs remplacements, mais rappelez-vous que l'ordre est de gauche à droite.
$a="some text =keep this,but not this"
$a.split('=')[1].split(',')[0]
résultats
keep this
Cela devrait faire ce que vous voulez:
C:\PS> if ('=keep this,' -match '=([^,]*)') { $matches[1] }
keep this
J'ai référencé la réponse de @ benjamin-hubbard ci-dessus pour analyser le résultat de dnscmd
pour les enregistrements A et générer un couple PHP "dictionnaire"/paires valeur-clé d'adresses IP et de noms d'hôte. J'ai enfilé plusieurs -replace
args ensemble pour remplacer du texte par rien ou tab formater les données pour le fichier PHP.
$DnsDataClean = $DnsData `
-match "^[a-zA-Z0-9].+\sA\s.+" `
-replace "172\.30\.","`$P." `
-replace "\[.*\] " `
-replace "\s[0-9]+\sA\s","`t"
$DnsDataTable = ( $DnsDataClean | `
ForEach-Object {
$HostName = ($_ -split "\t")[0] ;
$IpAddress = ($_ -split "\t")[1] ;
"`t`"$IpAddress`"`t=>`t'$HostName', `n" ;
} | sort ) + "`t`"`$P.255.255`"`t=>`t'None'"
"<?php
`$P = '10.213';
`$IpHostArr = [`n`n$DnsDataTable`n];
?>" | Out-File -Encoding ASCII -FilePath IpHostLookups.php
Get-Content IpHostLookups.php