我的第一个数组包含一行字符串($unprotected
,其中包含像"this list contains 456454
“这样的行),它需要与另一个数组($blocklist
,例如@('456454', '456789')
)进行比较。
以下是我的尝试:
foreach ($ele in $blocklist) {
foreach ($elem in $unprotected) {
if ($ele -contains $elem) { }
else { $var_chk = '1' }
}
if ($var_chk = '1') { $Arr_lst += $elem }
}
字符串
2条答案
按热度按时间deyfvvtc1#
您的 * 直接 * 问题是PowerShell的
-contains
运算符是一个 * 集合运算符 *,它测试LHS对象是否 * 完全等于 * RHS集合的至少一个元素。它不要与用于 * 子字符串匹配 * 的.Contains()
.NET * 方法 * 混淆。-like
与 * 正则表达式 * 一起使用,或将-match
与 * 正则表达式 * 一起使用,默认情况下,这两种运算符都不区分大小写 *。有关详细信息,请参阅this answer。在您的情况下,我建议使用基于regex的简化方法,使用
-notmatch
,-match
运算符的否定形式:|
)公式化一个正则表达式,它在一个更大的输入字符串中查找$blockList
数组的任何元素,作为一个完整的单词。.Where()
方法遍历$unprotected
数组的元素,并通过-notmatch
仅返回那些与正则表达式不匹配的元素。字符串
ecr0jaav2#
更新2:将数组声明中的
;
替换为,
老实说,我不知道使用;
的shell是什么最新消息:
使用
[System.Collections.ArrayList]
代替常规数组字符串
原件:
也许是
Compare-Object
?它为不在两个数组中的每个值返回一个[PSCustomObject]
数组,如果它存在于左数组或右数组中,则该值和箭头显式显示范例:
型