2013-08-08 11 views
6

Ich habe eine Zeichenfolge muss ich eine Variable hinzufügen, damit ich die string.format Methode verwenden, aber die Zeichenfolge enthält auch das Symbol "%20" (nicht sicher, was es darstellt, wahrscheinlich ein Leerzeichen oder etwas) . Wie auch immer, da die Zeichenfolge mehrere "%" enthält und ich nur die Variable zum ersten hinzufügen möchte, um die ID zu setzen, gibt es eine Möglichkeit, die Zeichenfolge an den Punkten oder etwas zu entkommen?Escape-String für Lua's string.format

Wie es jetzt ist:

ID = 12345 
string.format("id=%s&x=foo=&bar=asd%20yolo%20123-1512", ID) 

ich bad argument #3 to 'format' (no value). Fehler - da es drei Variablen übergeben werden erwartet.

Antwort

5

Sie können eine % mit einem anderen % entkommen, z.B. string.format("%%20")%20

+0

perfekt, genau das, was ich suchte – user1593846

1

Der folgende Code über Flucht alle URL entkommt geben wird (das heißt,% gefolgt von einer Ziffer):

ID=12345 
f="id=%s&x=foo=&bar=asd%20yolo%20123-1512" 
f=f:gsub("%%%d","%%%1") 
print(string.format(f,ID)) 
+0

Warum '%%% 1 'nicht Fehler an? Es gibt hier keine erfassten Teilstrings. Nur '%%% 0' ist laut Lua Manual möglich. –

+2

@EgorSriptunoff, das Handbuch sagt "wenn das Muster keine Aufnahmen angibt, dann verhält es sich so, als ob das ganze Muster in einem Capture war.". – lhf

3

Im Gegensatz zu vielen anderen Sprachen, Lua verwendet % die folgenden magischen Zeichen zu entkommen:

() . % + - * ? [ ]^$ 
1

ich habe Sie gesehen haben, eine Antwort akzeptiert, aber wirklich, sollte diese Situation fast nie passieren in einer realen Anwendung. Sie sollten versuchen, Muster mit anderen Daten zu mischen.

Wenn Sie eine Zeichenfolge wie dieses: x=foo=&bar=asd%20yolo%20123-1512 und Sie den ID-Teil vorangestellt, um es string.format verwenden, sollten Sie etwas wie folgt verwenden:

s = "x=foo=&bar=asd%20yolo%20123-1512" 
ID = 12345 
string.format("id=%d&%s", ID, s) 

(Anmerkung: ich verwendet habe %d weil Ihre ID ist eine Nummer, so ist es in diesem Fall %s bevorzugt.)