2013-08-08 19 views
6

文字列がありますstring.formatメソッドを使用するために変数を追加する必要がありますが、文字列には"%20"という記号が含まれています(おそらく空白など) 。とにかく文字列が複数の"%"を含んでいて、私はidを設定する最初の変数に変数を追加したいだけですが、ポイントや何かで文字列をエスケープする方法はありますか?ルアのstring.formatのエスケープ文字列

それが今あるので:

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

私はbad argument #3 to 'format' (no value).エラーが出る - それは3つの変数が渡されることを予期しているため。

答えて

5

%を別の%でエスケープすることができます。 string.format("%%20")%20

+0

完璧に、私が探していたもの – user1593846

1

エスケープ以下のコードを与えるすべてのURLエスケープ(つまり、数字が続く%である):Luaは以下の魔法の文字をエスケープする%を使用して、他の多くの言語とは異なり

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

なぜ '%%% 1'はエラーを発生させないのですか?キャプチャされた部分文字列はここにありません。 Luaのマニュアルによれば、 '%%% 0'だけが可能です。 –

+2

@EgorSkriptunoff、このマニュアルでは「パターンにキャプチャが指定されていない場合は、パターン全体がキャプチャ内にあるかのように動作します。 – lhf

3

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

私はあなたが答えを受け入れたのを見ましたが、本当にこの状況は実際のアプリケーションではほとんど起こりません。パターンを他のデータと混同しないようにしてください。

あなたはこのような文字列がある場合:

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

(注:x=foo=&bar=asd%20yolo%20123-1512を、あなたはそれがstring.formatを使用してIDの一部を付加したい、あなたはこのようなものを使用する必要があり、あなたのIDので、私は%dを使用しています)

関連する問題