Sería mi situación será un lugar apropiado para utilizar el '/ i' atributo de REGEX?

StackOverflow https://stackoverflow.com/questions/4720248

  •  12-10-2019
  •  | 
  •  

Pregunta

Estoy haciendo un gran catálogo de todos los posibles nombres del sistema operativo que pueden ser apoyadas por mi particular versión de VMWare. Al principio yo les estaba escribiendo todos los otros estando en los archivos VMX pero luego me encontré con un sitio web que tenían todos ellos en la lista, el problema es que no están entubados adecuadamente para proporcionar un partido "perfecto", sería este el momento perfecto para utilizar el atributo de expresiones regulares para el caso de falta de sensibilidad?

También como cuestión lado, ¿sería posible extraer la lista de sistemas operativos desde el sitio web ?. Parecen estar en una tabla HTML formateado. Me ahorraría mucho tiempo tener que escribirlos todos.

Me miró extracto de HTML :: Tabla, y yo no entiendo muy bien cómo usarlo. En lo que respecta a la mesa pude encontrar la sección en el código de sitios web y copiado en un nuevo archivo HTML para que pueda tener en mi escritorio.

Esto es extraño, probablemente estoy perdiendo algo. Pero no soy capaz de igualar con mayúsculas y minúsculas. Cuando terminar mi expresión regular con / XMI consigo esta salida;

Use of uninitialized value $guest_os in concatenation (.) or string at discovery4.pl line 146.

Lo que he descubierto media que no hay ninguna coincidencia para escalar asociado a la que estoy tratando de imprimir.

De todos modos sé que estoy teniendo un problema con él sin querer coincidir con ningún caso porque si modifico winnetstandard a winNetStandard funciona y dice ,; Windows Server 2003, Standard Edition. ¿Qué es lo que debería decir.

¿Fue útil?

Solución

HTML :: TableExtract puede ser útil. En lo que va a juego, no estoy seguro de qué es lo que usted está tratando de igualar; si sólo están comparando dos nombres, uc($foo) eq uc($bar) tiene más sentido. Pero si usted tiene una expresión regular y desea todo el partido para ser sensible a mayúsculas, /i lo hará.

Ah, por lo que desea obtener los nombres de SO admitidas y ensamblarlos en una expresión regular y combinar su uso? Entonces, @osnames dadas, es posible que desee algo como esto:

my $osnames = join('|', map quotemeta, sort { length($b) <=> length($a) } @osnames);
my $regex = qr/guestOS\s*=\s*"(?i:$osnames)"/;

El ?i: limita el alcance de mayúsculas y minúsculas de los nombres sólo OS; sólo si desea GuestOS también ser sensible a mayúsculas usarías /i (y (?:$osnames)).

Otros consejos

Este sería el momento adecuado para usar el atributo /i, como cambiar el caso en realidad no puede dañar nada. Lo que haría para obtener la lista de sistemas operativos sería copiar el código HTML de las secciones donde la lista es, el uso de expresiones regulares en la lista de forma que produzca en el formato que necesita para, a continuación, utilizar el texto como salida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top