正则表达式用于+

hua*_*eng 1 regex perl

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

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

test.txt:

Fred
fred
FRED
FreD
Run Code Online (Sandbox Code Playgroud)

执行命令后:

perl sc.pl test.txt

Fred
FreD
Run Code Online (Sandbox Code Playgroud)

为什么FreD打印出来?我有用[a-z]+,似乎+ 唯一匹配小写的期望最后一个?

hau*_*kex 8

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

为了得到想要的结果,也可以锚定正则表达式的结尾:/^[A-Z][a-z]+$/.

另见perlretut.

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