Ich arbeite an einer Hausaufgabe, um zu überprüfen, ob eine eingegebene Zeichenfolge vollständig aus Kleinbuchstaben besteht. Hier ist das grundlegende Skript, das uns zur Verfügung gestellt wird.
Hier ist die Zeile, die ich ändern muss.
if [[ "$input" =~ Add your regular expression here ]]
Wenn ich [a-z]
irgendetwas eingebe, das nur einen Kleinbuchstaben enthält, wird es validiert. Bei [[:lower:]]
„Brian“ wird es validiert und bei „cats“ nicht, aber Kauderwelsch wie z. B. trhrh
ist in Ordnung. Ich kenne den hier zu verwendenden regulären Ausdruck nicht. Ich wäre für jede Hilfe sehr dankbar.
Antwort1
Testen Sie, ob die Zeichenfolge etwas enthält, dasnichtein Kleinbuchstabe.
if [[ "$input" =~ [^[:lower:]] ]]; then
# contains something that is not a lower case letter
else
# contain only lower case letters
fi
oder,
if ! [[ "$input" =~ [^[:lower:]] ]]; then
# contain only lower case letters
fi
Das ^
am Anfang eines eingeklammerten Ausdrucks kehrt den Sinn der Übereinstimmung um, so dass [^abc]
jedes einzelne Zeichen übereinstimmt, dasnicht a
, b
, oder c
.
Alternativ können Sie die gesamte Länge der Zeichenfolge anpassen, indem Sie die Zeichenfolge an beiden Enden verankern:
if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
# contain only lower case letters
fi
Das ^
am Anfang des Ausdrucks verankert nur am Anfang der Zeichenfolge, während das $
am Ende am Ende der Zeichenfolge verankert ist. Dazwischen erlauben wir mit nur Kleinbuchstaben [[:lower:]]+
, also einen oder mehrere Kleinbuchstaben. Die Verwendung *
von anstelle von +
würde es dem Ausdruck ermöglichen, auch mit einer leeren Zeichenfolge erfolgreich übereinzustimmen.
Beachten Sie auch den Unterschied zwischen [[:lower:]]
(entspricht einem einzelnen Kleinbuchstaben) und [:lower:]
entspricht einem der Zeichen :
, l
, o
, w
, e
, oder r
). In der ursprünglichen Frage sagten Sie, dass Brian
mit übereinstimmte, [:lower:]
während cats
dies nicht der Fall war, was jetzt Sinn ergeben sollte. In einer Bearbeitung haben Sie den Ausdruck in das richtige geändert [[:lower:]]
und cats
sollten jetzt auch übereinstimmen.
Mit einem Globbing-Match für die reguläre Ausdrucksübereinstimmung:
if [[ "$input" == *[![:lower:]]* ]]; then
# contains something that is not a lower case letter
else
# contain only lower case letters
fi
In einem Globbing-Muster !
funktioniert der Anfang eines eingeklammerten Ausdrucks genauso wie ^
im Fall eines regulären Ausdrucks (obwohl ich glaube, dass dies bash
auch ^
in Globbing-Mustern erkannt wird).
Antwort2
Sie können auch mit diesem OneLiner nachsehen, wenn Sie möchten:
echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"