我需要找到標識符在一個文本文件標識符:匹配除了關鍵字
但我不希望有一個匹配,如果標識符是一個關鍵詞。舉例來說,如果我有「爲」爲關鍵詞,在下面:
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」?
我同意這個答案的一些意圖,但是如果你的代碼樣本沒有顯着*比原來糟糕的性能,這將有所幫助。可以使用散列來測試集合成員資格('@關鍵字{$ _} ++ for @ KEWYWORDS',然後'if(!$ keywords {$ 1})')或使用單獨的正則表達式。不要對'eq'使用循環測試,它甚至不會花費早期的時間來解決問題,12行代碼可以在1到3之間完成。 – hobbs 2012-08-17 02:37:38
謝謝你hobbs!我也在這裏學習。 雖然你的描述很清楚,但這裏是一個完整的重寫: 'my $ entireFile =「for(i = 0; i
2012-08-18 01:05:51
看起來不錯:) – hobbs 2012-08-18 01:12:17