텍스트 파일에서 식별자를 찾아야합니다.키워드를 제외한 식별자 일치
식별자가 키워드 인 경우 일치하지 않습니다.
for (i=0 ; i< max ; i++)
내가 얻어야한다 : 예를 들어, 나는 다음의 키워드로 "를"경우
Found: i
Found: i
Found: max
Found: i
내가보기 미리 주장에 보였다,하지만 난 할 수 wan't 그것이 작동합니다
$IDENTIFIER="(?!(for|while|do))[a-zA-Z_]+[a-zA-Z0-9_]*"
while ($entireFile =~ /($IDENTIFIER)/g)
{
print "Found ($1)" . "\n";
}
를 내가 얻을 :
Found: or
Found: i
Found: i
Found: max
Found: i
이것은 내가 원하는 것을 조용히하지 않는다! 내가 왜 "또는"을 얻는 지 이해하지만 어떻게 그것을 더 똑똑하게 만들고 "for"를 완전히 배제 할 수 있습니까?
이 답변의 의도에 동의하지만 코드 샘플에 원본보다 성능이 크게 떨어지는 경우 도움이됩니다. 해시를 사용하여 집합 멤버십을 테스트하거나 ('$ keywords {$ _} ++ for @ KEWYWORDS','if (! $ keywords {$ 1})}) 또는 별도의 정규식을 사용하십시오. 조기에 구제조차하지 않는'eq'를위한 루프 테스트와 1과 3 사이에서 할 수있는 것을위한 12 줄의 코드를 사용하지 마십시오. – hobbs
감사합니다. hobbs! 나는 여기서도 배우고있다. 귀하의 설명은 매우 명확하지만, 다음은 전체 재 작성입니다 : 'my $ wholeFile = "for (i = 0; i
잘 보입니다. :) – hobbs