det er funksjon is_upper I Perl, så hvordan kan vi sjekke om en streng inneholderbare store bokstaver?
den enkle tingen er å sammenligne den med den store versjonen av seg selv:
if ($str eq uc $str) { print "All the characters are upper case\n";}
men dette vil også si at » 123 » oss alle store bokstaver.
Noen ganger Er Dette Ikke det du trenger.
Minst en stor bokstav
i tillegg til å sjekke om stor bokstavversjonen av strengen er lik seg selv, vil vi kanskje sørge for at det er minst en stor bokstav.Vi kan bruke en regex:
if ($str =~ //) { print "There is an upper case letter\n";}
DETTE vil fungere med DEN latinske ABC, men vil ikke matche karakterer som den latinske abc (store bokstaver) fra den ungarske abc, eller andre merkelige karakterer som en umlaut ä (STOR bokstav).
Minst en Stor Bokstav Unicode
For at det er \p{Store bokstaver} som vil matche nøyaktig en øvre caseUnicode tegn. Så det vil samsvarer med noen av disse:ÄAÁBCDEÉFGHIÍJKLMNOÓÖŐPQRSTUÚÜŰVWXYZ
if ($str =~ /\p{Uppercase}/) { print "There is an upper case Unicode letter\n";}
Alle tegnene er store bokstaver Unicode bokstaver
Det kan ikke være nok å ha én stor bokstav.Du kan kreve å ha dem alle:I så fall kan vi bruke ^ og $ regex anchorsto matche begynnelsen og slutten av strengen henholdsvis.
vi bruker også + quantifier som betyr 1 eller flere av thepreeding ting. I vårt tilfelle en eller flere av de foregående store bokstaver tegn.
if ($str =~ /^\p{Uppercase}+$/) { print "There is an upper case Unicode letter\n";}
Alle tegnene Er Store Bokstaver Unicode bokstaver eller mellomrom
selvfølgelig er det sjelden at en streng bare består av store bokstaver.noen ganger vil vi også tillate andre tegn. For eksempel ønsker vi å tillate spaces også. I dette tilfellet lager vi en tegnklasse (i firkantede parenteser)som er bygget opp fra et mellomrom og tegnklassen som representerer alle store bokstaver i verden: .
if ($str =~ /^+$/) { print "There is an upper case Unicode letter\n";}
Prøver eksemplene
når vi prøver eksemplet, kan vi enten lese strengene fra en file.In i så fall vil vi sannsynligvis ønske ååpne filen ved hjelp av utf-8-flagget aktivert:
open(my $fh, '<:encoding(UTF-8)', $filename)
På den annen side,hvis strengene som skal sammenlignes er i koden, må man legge til bruk utf8; til begynnelsen av skriptet.
I begge tilfeller anbefales det å endre standard utgangskanalerå bruke utf-8 med følgende:
use open ':std', ':encoding(utf8)';
Prøv dette eksemplet:
use strict;use warnings;use 5.010;use utf8;use open ':std', ':encoding(utf8)';foreach my $str ("1", "ä", "äÄ", " Ä", "X", "Á", "É", "Í", "Ö", "Ő", "Ú", "Ü") { if ($str =~ /^+$/) { say $str; } else { say "no $str"; }}