2011-01-18 3 views
0

내 특정 버전의 VMWare에서 지원할 수있는 모든 가능한 OS 이름의 대규모 카탈로그를 만들고 있습니다. 원래 VMX 파일에 서서 모든 것을 쓰고 있었지만 모두 나열된 웹 사이트를 찾았습니다. 문제는 제대로 일치하지 않아 완벽하게 일치하지 않습니다. 대소 문자를 구분하지 않는 정규식 속성?내 상황이 '/ i'REGEX 속성을 사용하기에 적절한 곳이 될 수 있습니까?

또 다른 질문으로, 웹 사이트에서 OS 목록을 추출 할 수 있습니까? 그들은 HTML 형식의 차트를보고 있습니다. 그것들을 모두 타이프해야하는 데 많은 시간을 절약 할 수 있습니다.

HTML :: Table 추출물을 보았습니다. 사용법을 이해하지 못했습니다. 지금까지 테이블이 염려되자 웹 사이트 코드에서 해당 섹션을 찾을 수 있었고 새로운 html 파일로 복사하여 바탕 화면에 저장할 수있었습니다.

이것은 이상합니다. 나는 아마 뭔가를 놓치고 있습니다. 그러나 나는 대소 문자를 구분하지 못합니다./xmi로 정규 표현식을 끝낼 때 나는이 결과를 얻는다;

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

내가 발견 한 것은 인쇄하려고하는 스칼라와 연결할 일치가 없음을 의미합니다.

는 어쨌든 나는 그것을 내가 어떻게 작동하고 말한다 winNetStandardwinnetstandard을 수정하는 경우 때문에 어떤 경우와 일치하고 싶었하지에 문제가 있어요 알고 · · · Windows Server 2003, Standard Edition. 그것이 무엇을 말해야하는지입니다.

+0

캡처 된 값을 사용하기 전에 항상 일치하는 항목이 있는지 테스트하십시오. 일치해야한다고 생각하는 선과 작동하지 않는 정규식을 표시하십시오. 그렇지 않으면 우리는 무엇이 잘못되었는지 알지 못할 것입니다. – ysth

+0

일치하는 항목을 테스트하는 가장 좋은 방법은 무엇입니까? – ianc1215

답변

2

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: 그냥 OS 이름에 소문자 구분의 범위를 제한을; guestOS도 대소 문자를 구분하지 않으려는 경우에만 /i (및 (?:$osnames))을 사용하십시오.

+0

VMware 구성 파일에서 매우 특정한 행을 찾으려고합니다. 예를 들어, 다음과 같이 보일 수 있습니다. guestOS = "freebsd-64"이 모든 작업을 수행하는 데 꽤 좋은 방법이 있었지만, 난처한 상황이었고, 알아 낸 시간의 약 95 % 만 처리했습니다. 그래서 내가이 웹 사이트에서 정보를 얻으면 내가 할 수있는 일을 내 성냥에 도움이 될 것입니다. – ianc1215

+0

@Solignis : 업데이트 내 대답 – ysth

+0

내가 원하는 것은 테이블에서 데이터를 가져 와서 XML 파일에 쓰는 해시로 변환하는 것입니다. 그런 다음 스크립트는 파일을 해시로 다시 읽고 키를 사용하여 VMX 파일에서 보여준 예제 행과 비교합니다. – ianc1215

0

대소 문자를 변경하면 실제로 아무 것도 해를 끼칠 수 없으므로 /i 속성을 사용하는 것이 적절한시기입니다. 운영 체제 목록을 얻으려면 목록이있는 섹션의 html을 복사하고 목록에 정규 표현식을 사용하여 필요한 형식으로 출력 한 다음 출력 된 텍스트를 사용하는 것이 좋습니다.