我正在尝试查看文件中是否存在某些输入的条目,因此我使用正则表达式来查询每一行:
cat $file | where {$_ -match "^script\$fileName -*"}
其中 $fileName 是在别处定义的一些输入。
如何更改正则表达式以插入变量而不是匹配 '$fileName' ?
我正在尝试查看文件中是否存在某些输入的条目,因此我使用正则表达式来查询每一行:
cat $file | where {$_ -match "^script\$fileName -*"}
其中 $fileName 是在别处定义的一些输入。
如何更改正则表达式以插入变量而不是匹配 '$fileName' ?
除了给出的答案,因为 $fileName 可能包含诸如“。”之类的字符。或 '\' 您应该按如下方式对其进行转义:
cat $file | where {$_ -match "^script\\$([regex]::Escape($fileName)) -*"}
Escape 方法将转义像 '.' 这样的位。以及对于你。
例如
[regex]::Escape(".\bar.txt")
给
\.\\bar\.txt
$fileName
被插值,所以你最终得到一个传递给正则表达式的字符串,如下所示:
cat $file | where {$_ -match "^script\foo.txt -*"}
当实际上我们想要一个 liternal来匹配\
时,它充当了下一个字符的转义字符。\
在这种情况下,您需要转义转义字符,例如:
cat $file | where {$_ -match "^script\\$fileName -*"}
也可以在 powershell 内部分解 RegEx。
$fileName = 'test'
'^script\test-*' -match ('\^script\\' + $fileName + '-*')
更具可读性,并且可以与变量有括号的多维数组一起使用[]
$fileName = New-Object object[][] 1
$fileName[0] = @('test')
'^script\test-*' -match ('\^script\\' + $fileName[0][0] + '-*')