3

ファイルに入力のエントリがあるかどうかを確認しようとしているので、正規表現を使用して各行をクエリしています。

cat $file | where {$_ -match "^script\$fileName -*"}

ここで、$fileNameは他の場所で定義された入力です。

'$ fileName'に一致する代わりに、変数を補間するように正規表現を変更するにはどうすればよいですか?

4

3 に答える 3

9

与えられた答えに加えて、$fileNameには「。」などの文字を含めることができます。または'\'次のようにエスケープする必要があります。

cat $file | where {$_ -match "^script\\$([regex]::Escape($fileName)) -*"}

Escapeメソッドは、「。」のようなビットをエスケープします。そしてあなたのために。

例えば

[regex]::Escape(".\bar.txt")

与える

\.\\bar\.txt
于 2012-11-08T10:02:47.143 に答える
3

$fileName補間されるので、次のような正規表現に渡される文字列になります。

cat $file | where {$_ -match "^script\foo.txt -*"}

\、実際にリターナル\を照合したいときに、次の文字のエスケープ文字として機能します。この場合、エスケープ文字をエスケープする必要があります。例:

cat $file | where {$_ -match "^script\\$fileName -*"}
于 2012-11-08T00:33:08.767 に答える
0

PowerShell内で正規表現を分割することも可能です。

$fileName = 'test'
'^script\test-*' -match ('\^script\\' + $fileName + '-*')

より読みやすく、変数に角かっこが含まれる多次元配列で機能します[]

$fileName = New-Object object[][] 1
$fileName[0] = @('test')
'^script\test-*' -match ('\^script\\' + $fileName[0][0] + '-*')
于 2019-09-17T15:55:08.137 に答える