regex 在Powershell脚本中使用正则表达式来验证一个值是否与另一个值相同

a64a0gku  于 2023-11-20  发布在  Shell
关注(0)|答案(1)|浏览(125)

我有一个使用-like的Powershell脚本来进行值比较。我可以使用传统的正则表达式方法编写正则表达式,它在online testers I've used中工作,但我不能让它在我的脚本中工作。我怀疑这只是一个语法问题,但我引用的所有网站都没有专门解决脚本问题。
我正在检查名称空间,看是否有匹配项。例如,
www.domain.com
www.itdomain.com
www.anotherdomain.com
www.somedomain.com
在这个例子中,我只想匹配前两个选项。
在我的脚本中编写这段代码增加了一个小的复杂性,因为值“domain”在一个变量中,所以我尝试了,
$domainUrl -like "*.(it)?$($domain).*",但结果总是false
我在Powershell语法中缺少了什么?

qq24tv8q

qq24tv8q1#

-like运算符匹配wildcard patterns,而不是regexes
您需要-match运算符。
您的模式"*.(it)?$($domain).*"实际上是这两种模式语言的混合,这是行不通的。
你的意思大概是:

$domain = 'domain'

'www.itdomain.com' -match "\.(it)?$domain\." # -> $true

字符串
请注意,-match--与-like不同--默认情况下匹配 * 子字符串 *,因此不需要使用给定的正则表达式将输入字符串 * 作为一个整体 * 来使用。
也就是说,上面匹配一个文字.(在正则表达式中必须转义为\.),后跟itdomaindomain(it)?匹配it * 如果存在 *(?))和另一个文字.(输入字符串中的任何位置)。有关详细信息,请参阅this regex101.com page
(The regex可以被细化以使匹配更健壮。
有关-like(通配符)与-match(正则表达式)的详细信息,请参见this answer

相关问题