无效的表达方式

时间:2019-01-04 18:37:47

标签: regex powershell

PowerShell中的以下Regex模式给我带来了真正的麻烦。双引号和单引号是罪魁祸首,但我不知道如何让PowerShell接受它。如何使PowerShell成功接受此模式?

如果我将模式复制到变量中,PowerShell会在模式中找到第一个引号后抱怨出现意外令牌。

$myRegex = "^param[\s?]*\([\$\sa-zA-Z\=\@\(\)\"\d\,\:\\\_\.\']*\)"

然后我尝试通过在双引号旁边添加另一个引号来转义双引号。这次接受了字符串,但是正则表达式失败。请注意下一个示例中的双引号。

$myRegex = "^param[\s?]*\([\$\sa-zA-Z\=\@\(\)\""\d\,\:\\\_\.\']*\)"
$somelongString -replace $myRegex

错误消息:

The regular expression pattern ^param[\s?]*\([\$\sa-zA-Z\=\@\(\)\"\d\,\:\\\_\.\']*\) is not valid.

更新1: 根据@Dan Farrell的建议,我将正则表达式更新如下:

$myRegex = "^param(\s?)*\([\$\sa-zA-Z\=\@\(\)\""\d\,\:\\\_\.\']*\)"

更新2: 这是我要移植到PowerShell的Regex的working example

1 个答案:

答案 0 :(得分:1)

在.NET正则表达式中转义_会导致错误。要在"字符串文字中使用"...",需要用反引号将其转义,请使用`"。此外,您只需要在字符类中转义\

使用

$myRegex = "^param\s*\([$\sa-zA-Z=@()`"\d,:\\_.']*\)"