PowerShell脚本中使用正则验证值匹配的语法问题
PowerShell中-like匹配域名失败的问题解决
核心问题:你搞混了-like和-match的作用——-like是通配符匹配,不支持正则语法(比如(it)?这种可选分支写法),你写的正则语法在-like里会被当成字面字符处理,自然匹配失败。
两种解决办法:
1. 用-like的通配符写法
通配符里没有“可选分支”的语法,所以要把两种匹配情况(带it和不带it)拆成两个通配符模式,用-or连接:
$domain = "domain" $domainUrl = "www.itdomain.com" # 匹配www.domain.com 或 www.itdomain.com $domainUrl -like "*.$domain.*" -or $domainUrl -like "*.it$domain.*"
2. 改用-match的正则匹配
如果想保留你原本的正则可选逻辑,直接用支持正则的-match操作符,这时候\.(it)?$domain\.这种正则语法就能正常生效:
$domain = "domain" $domainUrl = "www.domain.com" # 正则里的(it)?表示可选匹配it,完美匹配你要的两种域名 $domainUrl -match "\.(it)?$domain\."
为什么原来的写法无效?
你写的$domainUrl -like "*.(it)?$($domain).*"里,-like会把(it)?当成字面字符:
?在通配符里是匹配任意单个字符,不是“可选”的意思(it)就是字面的括号加it字符串
所以这个模式实际是在找包含.(it)+任意单个字符+domain的字符串,和你要匹配的域名完全不符,所以返回false。
内容的提问来源于stack exchange,提问作者McArthey
相关产品推荐
相关产品推荐

