0

Perl で少なくとも 2 つの大文字を含む特定の文字列に一致する正規表現を探しています。

4

3 に答える 3

6

なぜASCII文字だけに固執するのですか?

これは、 Unicode 文字プロパティを使用して、任意の言語の 2 つの大文字に一致します。

/\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 に答える