Estrictamente hablando string -match ...
y collection -match ...
son dos operadores diferentes. El primero obtiene un valor booleano y rellena $matches
. El segundo obtiene cada elemento de colección que coincide con un patrón y aparentemente no llena $matches
.
Su ejemplo debería funcionar como espera si el archivo contiene una sola línea (el primer operador funciona). Si un archivo contiene más de 2 líneas, se usa el segundo operador y $matches
no está configurado.
Lo mismo es cierto para otros operadores booleanos aplicados a una colección. Eso es collection -op ...
devuelve elementos donde item -op ...
es verdadero.
Ejemplos:
1..10 -gt 5 # 6 7 8 9 10
'apple', 'banana', 'orange' -match 'e' # apple, orange
operadores booleanos aplicadas a colecciones son muy útiles si se utiliza correctamente. Pero ellos pueden ser confusas, así y conducen a la fácil cometer errores:
$object = @(1, $null, 2, $null)
# "not safe" comparison with $null, perhaps a mistake
if ($object -eq $null) {
'-eq gets @($null, $null) which is evaluated to $true by if!'
}
# safe comparison with $null
if ($null -eq $object) {
'this is not called'
}
Otro ejemplo con -match
y -notmatch
puede parecer confuso:
$object = 'apple', 'banana', 'orange'
if ($object -match 'e') {
'this is called'
}
if ($object -notmatch 'e') {
'this is also called, because "banana" is evaluated to $true by if!'
}
muestran un ejemplo con datos reales - su regex y el texto que coincidió. – tripleee