如何在powershell中的正则表达式中插入变量

时间:2012-11-07 22:45:03

标签: regex powershell

我正在尝试查看文件中是否有某个输入的条目,所以我使用正则表达式来查询每一行:

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

其中$ fileName是在别处定义的输入。

如何更改正则表达式以插入变量而不是匹配'$ fileName'?

3 个答案:

答案 0 :(得分:9)

除了给出的答案,因为$ fileName可能包含诸如'。'之类的字符。或'\'你应该逃避它如下:

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

Escape方法将转义像“。”这样的位。和'\'为你。

E.g。

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

给出

\.\\bar\.txt

答案 1 :(得分:3)

$fileName进行插值,以便最后将一个字符串传递给正则表达式,如下所示:

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

\充当后续角色的转义字符,而实际上我们想要一个{nn} \来匹配。在这种情况下,您需要转义转义字符,例如:

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

答案 2 :(得分:0)

还可以将RegEx分解到powershell内部。

LDAP_MATCHING_RULE_IN_CHAIN

更具可读性,并且适用于变量带有方括号df2 <- df1[-which(duplicated(df1$PCODE)),] df3 <- aggregate(df2,list(df2$PRODUCT),FUN = length) df3 <- df3[which(df3$PRODUCT <3),] result <- df3[1]

的多维数组
$fileName = 'test'
'^script\test-*' -match ('\^script\\' + $fileName + '-*')