Domanda

Sto facendo un ampio catalogo di tutti i possibili nomi del sistema operativo che possono essere supportati dalla mia particolare versione di VMWare. In origine le scrivevo tutto mentre si trovavano nei file VMX ma poi ho trovato un sito web che avevano tutti elencati, il problema è che non sono adeguatamente cased per fornire una partita "perfetta", questo sarebbe il momento ideale per utilizzare il attributo regex per caso insensibilità?

Anche come una domanda lato, sarebbe forse estrarre l'elenco dei sistemi operativi dal sito web ?. Sembrano essere in un grafico HTML formattato. Mi farebbe risparmiare un sacco di tempo dover digitare tutti fuori.

ho guardato estrarre HTML :: Table, e io non capisco come usarlo. Per quanto la tavola è interessato sono stato in grado di trovare la sezione del codice di siti web e ho copiato in un nuovo file HTML in modo che io possa avere sul mio desktop.

Questo è strano, io sono probabilmente manca qualcosa. Ma io non sono in grado di eguagliare con il caso insensibilità. Quando finirà la mia espressione regolare con / xmi ottengo questo output;

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

Il che ho scoperto significa che non v'è alcuna corrispondenza associare al scalare che sto cercando di stampare.

In ogni caso so che sto avendo un problema con esso non voler corrispondere con nessun caso, perché se io modifico winnetstandard a winNetStandard funziona e dice ,; Windows Server 2003, Standard Edition. Che è quello che dovrebbe dire.

È stato utile?

Soluzione

HTML :: TableExtract può essere utile. Per quanto riguarda la corrispondenza va, io non sono sicuro che cosa è che si sta cercando di abbinare; se sono solo confrontando due nomi, uc($foo) eq uc($bar) ha più senso. Ma se si dispone di una regex e si desidera tutta la partita di essere case insensitive, /i lo farà.

Ah, così si vuole per ottenere i nomi supportate del sistema operativo e assemblarli in una regex e abbinare ad usarlo? Poi, dato @osnames, si potrebbe desiderare qualcosa di simile:

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

Il ?i: limita la portata del caso insensibilità solo i nomi del sistema operativo; solo se si desidera GuestOS essere anche case insensitive useresti /i (e (?:$osnames)).

Altri suggerimenti

Questo sarebbe il momento giusto per utilizzare l'attributo /i, come cambiare il caso non può davvero danneggiare nulla. Quello che vorrei fare per ottenere l'elenco dei sistemi operativi sarebbe quello di copiare il codice HTML delle sezioni in cui la lista è, l'uso regex nella lista in modo che emetta nel formato che vi serve a, e quindi utilizzare il testo in output.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top