特定の文字の後の文字列内のすべてのテキストを削除する最良の方法は何ですか?私の場合は「=」で、私の場合は別の文字の後に,
、しかしテキストをその間に保持しますか?
=これを守って、
これを行う別の方法は、演算子 -replace を使用することです。
$teststring = "test=keep this, but not this."
$teststring -replace ".*=" -replace ",.*"
.*=
は、等号までの任意の数の文字を意味します。
,.*
は、コンマの後に任意の数の文字が続くことを意味します。
基本的に文字列のこれら2つの部分を削除するので、それらを置き換えるために空の文字列を指定する必要はありません。複数の-replacesを使用できますが、順序は左から右であることを覚えておいてください。
$a="some text =keep this,but not this"
$a.split('=')[1].split(',')[0]
返す
keep this
これはあなたが望むことをするはずです:
C:\PS> if ('=keep this,' -match '=([^,]*)') { $matches[1] }
keep this
これは本当に古いですが、これにつまずくかもしれない誰かのために私のわずかなバリエーションを加えたかったです。正規表現は強力なものです。
等号とコンマの間にあるテキストを保持するには:
-replace "^.*?=(.*?),.*?$",'$1'
この正規表現は、行の先頭から始まり、最初の等号まですべての文字を消去し、次のコンマまですべての文字をキャプチャし、行の終わりまですべての文字を消去します。次に、行全体をキャプチャグループ(括弧内のすべて)に置き換えます。少なくとも1つの等号の後に少なくとも1つのコンマが含まれる行と一致します。 Trixによる提案と似ていますが、その提案とは異なり、これは等号またはコンマのいずれかのみを含む行とは一致せず、両方が順番に並んでいる必要があります。
上記の@ benjamin-hubbardの回答を参照して、Aレコードのdnscmd
の出力を解析し、PHP "辞書" /キーと値のIPとホスト名のペアを生成します。複数の-replace
一緒に引数を取り、テキストを何も置き換えないか、 tab 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