3

私はluaコードを持っています(コロナで実行):

local loginstr = "emailAddress={email} password={password}"
print(loginstr:gsub( "{email}", "tester@test.com" ))

このコードはエラーを生成します:

無効なキャプチャ インデックス

gsubパターンで中括弧が適切に指定されていないことが原因であることがわかりましたが、修正方法がわかりません。

プレースホルダー文字列を電子メール アドレスの値に置き換えるには、gsub パターンをどのように作成すればよいですか?

私が見つけることができるすべての lua 指向のサイトを見回しましたが、ほとんどのドキュメントは関連のない状況を中心に展開しているようです。

4

3 に答える 3

7

上記のコメントで示唆したように、電子メールがURLパラメータとしてエンコードされる場合、「@」文字のエンコードに使用される%40がキャプチャインデックスとして使用されます。検索パターンにはキャプチャがないため(40個は言うまでもなく)、これにより問題が発生します。

考えられる解決策は2つあります。エンコードされた文字列をデコードするか、置換文字列をエンコードして「%」文字をエスケープすることができます。最終結果で何をするかによっては、両方を行う必要がある場合があります。

次のルーチン(ここから取得しました-テストされていません)は、エンコードされた文字列をデコードできます。

function url_decode(str)
  str = string.gsub (str, "+", " ")
  str = string.gsub (str, "%%(%x%x)",
      function(h) return string.char(tonumber(h,16)) end)
  str = string.gsub (str, "\r\n", "\n")
  return str
end

文字列の%文字をエスケープするにはstr、次を使用できます。

str:gsub("%%", "%%%%")

'%'文字は'%%'としてエスケープされ、検索パターンと置換パターンの両方でエスケープする必要があります(したがって、置換内の%文字の量)。

于 2011-10-17T08:09:56.637 に答える
3

あなたの問題は、あなたがしようとしているgsubのでloginurlはなく、loginstr

コードで次のエラーが表示されます ( http://ideone.com/wwiZkを参照):

lua: prog.lua:2: attempt to index global 'loginurl' (a nil value)

そしてそれはあなたが見ているものと似ています。正しい変数を使用するように修正するだけです:

print(loginstr:gsub( "{email}", "tester@test.com" ))

言います(http://ideone.com/mMj0Nを参照):

emailAddress=tester@test.com password={password}

望んだ通りに。

于 2011-10-16T21:51:22.143 に答える
0

私はこれを値の部分に持っていたので、 value:gsub("%%", "%%%%") で値をエスケープする必要があります。

json の「何らかの値」を置き換える例:

local resultJSON = json:gsub(, "\"SOME_VALUE\"", value:gsub("%%", "%%%%"))
于 2020-09-16T12:30:45.833 に答える