正则表达式在perl中查找包含至少两个大写字母的字符串

时间:2013-02-28 06:23:37

标签: regex string perl

我正在寻找一个匹配特定字符串的正则表达式,该字符串在perl中至少有两个大写字母。我完全被困在任何指针解决这个将不胜感激。

3 个答案:

答案 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