2013-02-28 98 views

回答

6

爲什麼堅持只ASCII字母?

這將匹配任何語言的兩個大寫字母使用Unicode character properties

/\p{Lu}.*\p{Lu}/ 

\p{Lu}Unicode character property匹配具有小寫變體

又見perlretut: More on characters, strings, and character classes

小測試大寫字母:

my @input = ("foobar", "Foobar", "FooBar", "FÖobar", "fÖobÁr"); 

foreach my $item (@input) { 
    if ($item =~ /\p{Lu}.*\p{Lu}/) { 
     print $item . " has at least 2 uppercase!\n" 
    } else { 
     print $item . " has less than 2 uppercase!\n" 
    } 
} 

輸出:

foobar有不到2個大寫!
Foobar有不到2個大寫!
FooBar至少有2個大寫字母!
FÖobar至少有2個大寫!
fÖobÁr至少有2個大寫!

0

不知道到底你需要什麼:

perl -lane 'for(@F){if(/[A-Z]/){$count++ for m/[A-Z]/g}if($count >=2){print $_};$count=0}' 

測試下方

> echo "ABC DEf Ghi" | perl -lane 'for(@F){if(/[A-Z]/){$count++ for m/[A-Z]/g}if($count >=2){print $_};$count=0}' 
ABC 
DEf 
相關問題