我需要找到标识符在一个文本文件标识符:匹配除了关键字
但我不希望有一个匹配,如果标识符是一个关键词。举例来说,如果我有“为”为关键词,在下面:
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