string - - 检查字符串是否包含路径时匹配失败

标签 string powershell path escaping

我有一个字符串列表,需要检查每个项目以查看它是否包含某个字符串 $path,其中该字符串应包含 unc 路径和 $path > 也是一个 unc 路径。

例如:

"RW \\test" -match "\\test"

返回True,因为\\test包含在RW\\test中。太棒了。

那么为什么会返回 False ? :

"RW \\test\te" -match "\\test\te"

起初,我认为单个反斜杠可能在某种程度上充当了转义字符(即使在 PowerShell 中应该是 `)

所以我尝试了

"RW \\test\\te" -match "\\test\\te"

但这也会返回False ....

为什么?

最佳答案

您需要在 -match 运算符右侧的正则表达式中使用反斜杠转义两个反斜杠。

PS /> "RW \\test\te" -match "\\\\test\\te"
True

结果如下:

PS /> $matches[0]
\\test\te

您还可以对此进行扩展,以在正则表达式中使用命名捕获。命名捕获只是为正则表达式内的各个捕获提供友好的名称,使它们更容易作为 $matches 变量上的属性(而不是数字索引)进行引用。

PS /> "RW \\test\te" -match "(?<UNCPath>\\\\test\\te)"
True
PS /> $matches.UNCPath
\\test\te

请记住,反引号字符用于转义 PowerShell 双引号字符串中的某些特殊字符。但是,对于 -match 运算符,您将调用 .NET 正则表达式引擎。在 .NET 正则表达式引擎中,反斜杠用于转义正则表达式上下文中的特殊字符。因此,在此示例中,反引号转义字符不适用。

另外,请确保您没有转义源字符串中-match左侧的特殊字符运算符(operator)。您的最终示例不匹配的原因是您添加了第二个 \,但仅在右侧的正则表达式中转义了一个 \ -match 运算符。

关于string - - 检查字符串是否包含路径时匹配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49419368/

相关文章:

ios - 如何在 UITableView 中显示数组中的字符串?

c - printf 在 C 中用\r删除内容

c - 向 int 字符串添加前缀

java - 获取带引号的字符串

powershell - 递归 PowerShell 函数无法调用自身

windows - 如何从 PowerShell 获取错误代码 (ErrorLevel) 到 Windows 命令提示符?

python - Pyramid :如何避免将完整路径放入我的 __init__.py

node.js - Gatsby - 无法解析 'path' 中的 'C:\Users\...\gatsby-starter-hello-world\node_modules\postcss\lib'

PowerShell - 关于全局变量的问题

C# 从本地目录获取 URL 路径