我正在寻找一个匹配特定字符串的正则表达式,该字符串在 Perl 中至少有两个大写字母。
问问题
1354 次
3 回答
6
为什么只使用 ASCII 字母?
这将匹配使用Unicode 字符属性的任何语言中的两个大写字母。
/\p{Lu}.*\p{Lu}/
\p{Lu}
是一个Unicode 字符属性,匹配具有小写变体的大写字母
另请参阅perlretut:有关字符、字符串和字符类的更多信息
一个小测试:
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 个大写字母!
于 2013-02-28T06:46:57.057 回答
2
尝试使用这个:
/^.*[A-Z].*[A-Z].*$/
于 2013-02-28T06:28:24.410 回答
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
于 2013-02-28T06:36:54.827 回答