问题描述
我正在尝试在PowerShell中匹配字符串,但无法获取True。
"one.two" -match "One Two"
False
好吧,也许我提供的问题信息太有限了。 因此,这里有更多信息。我有以下代码:
$userRoles = @('User','Customer Support');
$adGroups = @('ad.group.user','ad.group.customer.admin');
$userRoleToAdGroup = @{};
foreach ($userRole in $userRoles) {
$adGroupsMatch = @($adGroups -match "$userRole")
$userRoleToAdGroup.Add($userRole,$adGroupsMatch)
}
$userRoleToAdGroup
对于客户支持,输出值为空。
解决方法
此处“一”和“二”之间的空格将按字面匹配“一二”。如果要匹配它们之间的任何字符,请使用:
"one.two" -match "One.Two"
在正则表达式.
中的含义是任何字符。或者您可以追加
* = 0 or more instances of previous charcter
+ = 1 or more instances of previous charcter
? = 0 or 1 instances of previous charcter
\w = match any word
\d = match any digit
\s = match any whitespace
{n,m} = match n to m instances of previous charcter
,
我不确定您要实现的目标,但您应该了解PowerShell语法和-match运算符。
匹配正则表达式时,匹配Customer Support
这样的角色名称实际上只是匹配相同的字符串。使该匹配 like 通配符的一种方法是
$String = "Customer Support"
$MatchString = "($($String -replace '\s+','|'))"
'ad.group.customer.admin' -match $MatchString
True
此代码将$String
中的所有空格分割并将其合并到合法的正则表达式查询"(Customer|Support)"
中。
注意
此代码将匹配其中包含单词“ customer”和/或“ support”的任何字符串。
'ad.group.user.support' -match $MatchString
True