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
答案 0 :(得分:1)
在.NET正则表达式中转义_
会导致错误。要在"
字符串文字中使用"..."
,需要用反引号将其转义,请使用`"
。此外,您只需要在字符类中转义\
。
使用
$myRegex = "^param\s*\([$\sa-zA-Z=@()`"\d,:\\_.']*\)"