2

問題の説明:

やあ。lua 関数 "string.gsub" の使用方法を理解しようとしています。私は次のようなマニュアルを読んでいます:

これは非常に強力な機能であり、さまざまな方法で使用できます。単純に使用すると、置換で提供されるパターンのすべてのインスタンスを置き換えることができます。値のペア、変更された文字列と行われた置換の数が返されます。オプションの 4 番目の引数 n を使用して、行われる置換の数を制限できます。

> = string.gsub("Hello banana", "banana", "Lua user")
Hello Lua user  1
> = string.gsub("banana", "a", "A", 2)  -- limit substitutions made to 2
bAnAna  2

質問

値のペアが返されると言うとき。新しい文字列値を取得するにはどうすればよいですか?

コード

local email_filename = "/var/log/test.txt"
local email_contents_file_exists = function(filename)
     file = io.open(filename, "r")
     if file == nil then
          return false
     else
          file.close(file)
          return true
      end
end
local read_email_contents_file = function()
   print('inside the function')
   if not email_contents_file_exists(email_filename) then 
      return false
   end
   local f = io.open(email_filename, "rb")
   local content = f:read("*all")
   f:close()
   print(content)
   --content = string.gsub(content, '[username]', 'myusername')
   --local tmp {}
   --tmp = string.gsub(content, '[username]', 'myusername')
   print(string.gsub(content, '[username]', 'myusername'))
   return content
end
local test = read_email_contents_file()

私がこれまでに試したこと:

上記のように、結果を印刷してみました。それは文字化けしたテキストの束を返します。元の文字列に保存しようとしましたが、結果を配列に保存しようとしました ( local tmp = {})

助言がありますか?

4

3 に答える 3

2
> = string.gsub('banana', 'a', 'A', 2)
bAnAna  2
> = (string.gsub('banana', 'a', 'A', 2))
bAnAna
于 2013-03-05T16:17:42.210 に答える
1

[ と ] は Lua パターンの魔法の文字なのでエスケープする必要があります。

于 2013-03-05T15:28:00.780 に答える
1

あなたは Lua users wiki をよく読んでいましたね。

Lua では、関数が複数の値を返す場合、次のようにすべての値にアクセスできます。

function sth()
  return 1, "hi", false
end
x, y, z, a, b, c = sth() -- x = 1; y = "hi" and z = false(boolean); a = b = c = nil

さて、string.gsub機能に戻ります。2 つの値を返します。gsub1 つ目は処理された文字列で、2 つ目は入力文字列に対して実行された回数です。

したがって、新しい文字列値を取得するには、次のようなものが最適です。

local tempString = string.gsub(content, '[username]', 'myusername')

また

local tempString = content:gsub( '[username]', 'myusername' )

もちろん、ここでは、Lua でのプログラミングの本で言及されている、Lua で使用されるさまざまなパターンについて認識する必要があります。

于 2013-03-05T15:30:36.893 に答える