正则表达式用于+

时间:2018-02-20 09:04:57

标签: regex perl

这是我的代码。我想打印出首都开头的所有线路:

while(<>){
    if(/^[A-Z][a-z]+/){
        print;
    }
}

test.txt

Fred
fred
FRED
FreD

执行命令后:

perl sc.pl test.txt

Fred
FreD

为什么会打印FreD?我使用[a-z]+,似乎+仅匹配小写字母与最后一个匹配?

1 个答案:

答案 0 :(得分:8)

字符串FreD/^[A-Z][a-z]+/匹配,因为[A-Z]匹配F[a-z]+匹配re

要获得所需的结果,请同时锚定正则表达式的结尾:/^[A-Z][a-z]+$/

另见perlretut

(编辑:我现在看到@Biffen在评论中提供了相同的答案,抱歉)