Подойдет ли моя ситуация для использования атрибута REGEX '/ i'? - PullRequest
0 голосов
/ 18 января 2011

Я делаю большой каталог всех возможных имен ОС, которые могут поддерживаться моей конкретной версией VMWare.Первоначально я писал их все в том виде, в каком они были в файлах VMX, но затем я нашел веб-сайт, на котором были перечислены все они, проблема в том, что они не имеют надлежащего соответствия для обеспечения "идеального" соответствия, было бы идеальным временем для использованияАтрибут regex для нечувствительности к регистру?

Также как дополнительный вопрос, возможно ли извлечь список ОС с веб-сайта?Они выглядят в формате HTML.Это избавило бы меня от необходимости печатать их все.

Я посмотрел на HTML :: Table extract и не совсем понял, как его использовать.Что касается таблицы, мне удалось найти раздел в коде веб-сайтов, и я скопировал его в новый HTML-файл, чтобы иметь его на своем рабочем столе.

Это странно, я, вероятно, что-то упустил.Но я не могу сравниться с регистронезависимостью.Когда я заканчиваю свое регулярное выражение с / xmi, я получаю этот вывод:

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

То, что я обнаружил, означает, что нет соответствия для сопоставления со скаляром, который я пытаюсь распечатать.

Во всяком случае, я знаю, что у меня возникла проблема, связанная с нежеланием сопоставления ни с одним регистром, потому что, если я изменяю winnetstandard на winNetStandard, он работает и говорит :;Windows Server 2003, Standard Edition.Что и должно быть сказано.

Ответы [ 2 ]

2 голосов
/ 18 января 2011

HTML :: TableExtract может быть полезным.Что касается сопоставления, я не уверен, что именно вы пытаетесь сопоставить;если вы просто сравниваете два имени, uc($foo) eq uc($bar) имеет больше смысла.Но если у вас есть регулярное выражение и вы хотите, чтобы все совпадение не учитывало регистр, /i сделает это.

Ах, так что вы хотите получить поддерживаемые имена os, собрать их в регулярное выражение и сопоставить, используя его?Затем, учитывая @osnames, вы можете захотеть что-то вроде этого:

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

?i: ограничивает область нечувствительности к регистру только именами ОС;* только если вы хотите, чтобы guestOS также не учитывала регистр, вы можете использовать /i(?:$osnames)).

0 голосов
/ 18 января 2011

Это было бы подходящее время для использования атрибута /i, так как изменение регистра не может повредить чему-либо.Чтобы получить список операционных систем, я бы скопировал html разделов, в которых находится этот список, использовал регулярное выражение в списке, чтобы оно выводилось в нужном вам формате, а затем использовал выведенный текст.

...