我正在寻找一个匹配特定字符串的正则表达式,该字符串在perl中至少有两个大写字母。我完全被困在任何指针解决这个将不胜感激。
答案 0 :(得分: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个大写!
答案 1 :(得分:2)
尝试使用:
/^.*[A-Z].*[A-Z].*$/
答案 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