这是我的代码。我想打印出首都开头的所有线路:
while(<>){
if(/^[A-Z][a-z]+/){
print;
}
}
test.txt
:
Fred
fred
FRED
FreD
执行命令后:
perl sc.pl test.txt
Fred
FreD
为什么会打印FreD
?我使用[a-z]+
,似乎+
仅匹配小写字母与最后一个匹配?
答案 0 :(得分:8)
字符串FreD
与/^[A-Z][a-z]+/
匹配,因为[A-Z]
匹配F
而[a-z]+
匹配re
。
要获得所需的结果,请同时锚定正则表达式的结尾:/^[A-Z][a-z]+$/
。
另见perlretut。
(编辑:我现在看到@Biffen在评论中提供了相同的答案,抱歉)