Est-ce que ma situation est un endroit approprié d'utiliser le « / i » attribut REGEX?

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

  •  12-10-2019
  •  | 
  •  

Question

Je fais un grand catalogue de tous les noms possibles OS qui peuvent être pris en charge par ma version particulière de VMWare. Au départ, je les écrivais tout comme ils se tenaient dans les fichiers VMX mais je trouve un site Web qui les avaient tous répertoriés, le problème est qu'ils ne sont pas correctement tubé pour fournir un match « parfait », serait-ce le moment idéal pour utiliser la attribut regex pour la casse?

De plus comme une question secondaire, serait-il possible extraire la liste des systèmes d'exploitation du site ?. Ils ont l'air d'être dans un tableau HTML formated. Il me sauverait beaucoup de temps avoir à les saisir toutes.

Je regarde HTML :: Table extrait, et je ne comprends pas vraiment comment l'utiliser. En ce qui concerne la table concerne, je suis en mesure de trouver la section dans le code des sites Web et j'ai copié dans un nouveau fichier html pour que je puisse l'avoir sur mon bureau.

Ce qui est étrange, je suis probablement manque quelque chose. Mais je ne suis pas en mesure de correspondre à la casse. Lorsque la fin de mon expression rationnelle / XMI je reçois cette sortie;

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

Ce que j'ai découvert dire qu'il n'y a pas de correspondance à associer au scalaire que je suis en train d'imprimer.

De toute façon je sais que je suis un problème avec elle ne voulant pas correspondre à aucun cas parce que si je modifie winnetstandard à winNetStandard il fonctionne et dit ,; Windows Server 2003, Standard Edition. Quel est ce qu'il doit dire.

Était-ce utile?

La solution

HTML :: TableExtract peut être utile. En ce qui concerne l'appariement va, je ne suis pas sûr de ce qu'il est que vous essayez de faire correspondre; si vous êtes deux noms comparez, uc($foo) eq uc($bar) est plus logique. Mais si vous avez une expression régulière et que vous voulez l'intégralité du match pour être insensible à la casse, /i fera.

Ah, vous voulez obtenir les noms des os pris en charge et de les assembler en une expression régulière et correspondre à l'utiliser? Ensuite, @osnames données, vous voudrez peut-être quelque chose comme ceci:

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

Le ?i: limite la portée de la casse à seulement les noms OS; seulement si vous voulez guestOS être insensible à la casse aussi utiliseriez-vous /i (et (?:$osnames)).

Autres conseils

Ce serait le bon moment pour utiliser l'attribut /i, comme changer le cas ne peut pas nuire vraiment quoi que ce soit. Ce que je ferais pour obtenir la liste des systèmes d'exploitation serait de copier le code HTML des sections où la liste est, l'utilisation regex sur la liste pour qu'elle soit dans le format que vous avez besoin, puis utilisez le texte émis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top