2014-10-09 10 views
7
str = "fa, (captured)[asd] asf, 31" 

for word in str:gmatch("\(%a+\)") do 
    print(word) 
end 

Hallo! Ich möchte ein Wort zwischen Klammern erfassen.Wie zeichne ich eine Zeichenfolge zwischen Klammern?

Mein Code sollte "gefangene" Zeichenfolge drucken.

lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\(' 

Und ich habe diese Syntaxfehler.

Natürlich kann ich nur Position der Klammern finden und string.sub Funktion

Aber ich ziehe einfach Code verwenden.

Auch Klammern gaben mir einen ähnlichen Fehler.

Antwort

8

Das Escape-Zeichen in Lua-Mustern ist %, nicht \. So verwenden Sie diese:

word=str:match("%((%a+)%)") 

Wenn Sie nur ein Spiel benötigen, gibt es keine Notwendigkeit für eine gmatch Schleife.

Um die Zeichenfolge in eckigen Klammern zu erfassen, ein ähnliches Muster verwenden:

word=str:match("%[(%a+)%]") 

Wenn das erfasste Zeichenfolge vollständig nicht aus Buchstaben, verwenden .- statt %a+.

4

lhf Antwort gibt Ihnen wahrscheinlich, was Sie brauchen, aber ich möchte eine weitere Option erwähnen, die ich fühle, ist zu wenig genutzt und kann auch für Sie arbeiten. Ein Problem mit der Verwendung von %((%a+)%) ist, dass es nicht für geschachtelte Klammern funktioniert: Wenn Sie es auf etwas wie "(Text (mehr) Text)" anwenden, erhalten Sie "mehr", obwohl Sie erwarten "Text (mehr) Text ". Beachten Sie, dass Sie es nicht beheben kann, indem er mit dem ersten schließenden Klammer (%(([^%)]+)%)) entsprechen, wie es Ihnen geben „Text (mehr“.

aber Sie %bxy pattern item verwenden können, die x und y Vorkommen balanciert und wird Geben Sie in diesem Fall (text(more)text) zurück (Sie müssten etwas wie (%b()) verwenden, um es zu erfassen.) Auch dies ist für Ihren Fall vielleicht zu viel, aber hilfreich für jemanden, der auf dieses Problem stößt.

+1

+1, das war meine ursprüngliche Antwort :) – lhf

+0

Vielen Dank für weitere Informationen. und deine Lua IDE ist großartig! –