PowerShell中-match运算符操作数位置不同结果不同的原因及解决方法
PowerShell -match 运算符相关问题解答
1. 相同内容不同顺序返回结果不一致的原因
-match 是 PowerShell 中的正则匹配运算符,固定判断左侧待匹配字符串是否包含右侧正则模式能匹配的子串,左右操作数的作用完全不同:
- 代码
("111" -match "111-XD"):左侧字符串是111,右侧匹配模式是111-XD,左侧没有包含-XD的子串,所以匹配失败返回false - 代码
("111-XD" -match "111"):左侧字符串是111-XD,存在子串111符合右侧模式要求,所以匹配成功返回true
2. 实现忽略操作数左右位置的匹配方法
如果需要只要两个字符串存在互相包含的关系就返回true,可以通过逻辑或组合两种顺序的匹配逻辑实现,常用方案如下:
正则匹配场景
如果需要保留正则匹配能力,直接拼接两个方向的匹配逻辑即可:
# 示例:任意方向匹配成功就返回true $a = "111" $b = "111-XD" $result = $a -match $b -or $b -match $a
普通字符串包含匹配场景
如果只是要判断两个字符串是否存在普通文本的包含关系,避免正则元字符(比如.、*、?)被当做正则规则解析,需要先对模式做转义处理,也可以封装为函数复用:
function Test-MutualInclude { param( [string]$Str1, [string]$Str2 ) $escapedStr1 = [regex]::Escape($Str1) $escapedStr2 = [regex]::Escape($Str2) return $Str1 -match $escapedStr2 -or $Str2 -match $escapedStr1 } # 调用示例 Test-MutualInclude "111" "111-XD" # 返回true
内容的提问来源于stack exchange,提问作者Andy McRae
相关产品推荐
相关产品推荐

