3 Stimmen

Lua-Vergleichsoperatoren (Platzhalter?)

Ich bin neu in Lua, also lerne ich gerade den Teil mit den Operatoren. Gibt es ein Wildcard-Zeichen, das mit Strings in Lua funktioniert?

Ich komme aus einem PHP-Hintergrund und ich bin im Wesentlichen versuchen, dies zu codieren:

--scan the directory's files
for file in lfs.dir(doc_path) do

     --> look for any files ending with .jpg
     if file is like ".jpg" then
       --do something if any files ending with .JPG are scanned
     end

end

Sie sehen, dass ich nach JPG-Dateien Ausschau halte, während ich in einer Schleife durch die Dateien in einem Verzeichnis gehe. Ich bin an das Prozentzeichen oder das Sternchen für die Suche nach Zeichenketten gewöhnt. Aber vielleicht hat Lua eine andere Methode?

Außerdem bin ich mit dieser Aussage völlig im Unklaren: "if file is like......."

3voto

RBerteig Punkte 39719

Sie wollen die Funktion string.match() die prüft, ob eine Zeichenkette mit einer Muster .

Hier ist meine Neufassung Ihres Beispiels (ungetestet):

--scan the directory's files
for file in lfs.dir(doc_path) do

     --> look for any files ending with .jpg
     if file:match "%.jpg$" then
       --do something if any files ending with .JPG are scanned
     end

end

Die Notation file:match "%.jpg%" ruft die Funktion string.match unter Verwendung des Syntaxzuckers für Methodenaufrufe, was funktioniert, weil alle String-Werte über string standardmäßig als ihre Metadaten festgelegt. Zur Vereinfachung des Ausdrucks habe ich auch die Klammern um den einzigen Parameter weggelassen.

Das Muster wird am Ende der Zeichenkette durch das $ am Ende, und prüft auf ein wörtliches . durch Anführung mit % . Da jedoch bei Mustern zwischen Groß- und Kleinschreibung unterschieden wird, werden nur Dateien gefunden, deren Erweiterung in Kleinbuchstaben geschrieben ist.

Um die Groß-/Kleinschreibung zu ignorieren, ist es am einfachsten, die Groß-/Kleinschreibung des Dateinamens vor dem Test zu falten, indem man schreibt file:lower:match"%.jpg$" , die einen Aufruf an string.lower() vor dem Aufruf von match . Alternativ können Sie das Muster auch wie folgt umschreiben "%.[Jj][Pp][Gg]$" um in beiden Fällen jedes Zeichen explizit abzugleichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X