2010-06-29 9 views
15

Digamos que tengo la cadena "bla, bla, F12, bla, bla, F32, bla, bla, bla" y quiero que coincida con el F12 y F32, ¿cómo hago para capturar tanto a la variable mágica $ coincidencias Powershell?

Si funciono el siguiente código en Powershell:

$string = "blah blah F12 blah blah F32 blah blah blah" 
$string -match "F\d\d" 

El $ coincide variable sólo contiene F12

También probé:

$string -match "(F\d\d)" 

Esta vez $ coincidencias tenían dos artículos, pero ambos son F12

Me gustaría $ matches para contener F12 y F32 para su posterior procesamiento. Parece que no puedo encontrar la forma de hacerlo.

Toda la ayuda sería muy apreciada. :)

+0

cualquiera que se pregunte por qué '-match' devuelve dos _F12_ resultados en el segundo intento, es porque _F12_ es a la vez el resultado de la _expresión de coincidencia _Y el resultado del primer grupo de coincidencia en la expresión (el resultado de los paréntesis ... –

Respuesta

31

Usted puede hacer esto utilizando Select-String en PowerShell 2.0, así:

Select-String F\d\d -input $string -AllMatches | Foreach {$_.matches} 

Hace un tiempo tuve asked for a -matchall operator en MS Connect y esta sugerencia se cerró como fijos con este comentario:

"Esto se soluciona con el parámetro -allmatches para select-string".

+0

Eso era precisamente lo que necesitaba. Muchas gracias :) – Etzeitet

+0

Entonces, ¿cómo hace referencia a los valores capturados, desde Select-String-AllMatches? –

+5

@NathanHartley '$ string | Select-String "(F \ d \ d)" -AllMatches | % coincidencias | % Value' –

12

que sugieren el uso de esta sintaxis que hace que sea más fácil de manejar su gama de combinaciones:

$string = "blah blah F12 blah blah F32 blah blah blah" ; 
$matches = ([regex]'F\d\d').Matches($string); 
$matches[1].Value; # get matching value for second occurance, F32 
Cuestiones relacionadas