0

我正在寻找一个匹配特定字符串的正则表达式,该字符串在 Perl 中至少有两个大写字母。

4

3 回答 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"
    }
}

输出:

foob​​ar 的大写字母少于 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 回答