如何测试一个字符串是否包含多个子字符串之一?

vik*_*ata 7 string powershell compare

我想知道,如果一个字符串包含的一个abc,def,xyz等我能做到这一点,如:

$a.Contains("abc") -or $a.Contains("def") -or $a.Contains("xyz")
Run Code Online (Sandbox Code Playgroud)

它确实有效,但如果这个子字符串列表发生变化,我必须更改代码,并且由于$a多次扫描,性能很差.

只需一个函数调用,有更有效的方法吗?

Mar*_*ndl 11

您可以使用-match方法并使用string.join自动创建正则表达式:

$referenz = @('abc', 'def', 'xyz')    
$referenzRegex = [string]::Join('|', $referenz) # create the regex
Run Code Online (Sandbox Code Playgroud)

用法:

"any string containing abc" -match $referenzRegex # true
"any non matching string" -match $referenzRegex #false
Run Code Online (Sandbox Code Playgroud)

  • 当文本包含特殊的正则表达式字符时,此代码段将失败.你必须使用`$ referenzRegex = [string] :: Join('|',[Regex] :: Escape($ referenz))#为这项工作创建正则表达式. (2认同)