私はグーグルで検索しましたが、それがわかりません。そんな単純な機能に思えますが、もちろんLuaにはありません。
Pythonで私はするだろう
string = "cat,dog"
one, two = string.split(",")
そして、1 = cat という 2 つの変数があります。2 = 犬
Luaでこれを行うにはどうすればよいですか!?
これを試して
str = 'cat,dog'
for word in string.gmatch(str, '([^,]+)') do
print(word)
end
「[^,]」は「カンマ以外のすべて」を意味し、+ 記号は「1 つ以上の文字」を意味します。括弧はキャプチャを作成します (この場合は実際には必要ありません)。
この分割関数をページの上部に追加します。
function string:split( inSplitPattern, outResults )
if not outResults then
outResults = { }
end
local theStart = 1
local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
while theSplitStart do
table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
theStart = theSplitEnd + 1
theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
end
table.insert( outResults, string.sub( self, theStart ) )
return outResults
end
次に、次のようにします。
local myString = "Flintstone, Fred, 101 Rockledge, Bedrock, 98775, 555-555-1212"
local myTable = myString:split(", ")
for i = 1, #myTable do
print( myTable[i] ) -- This will give your needed output
end
詳細については、こちらをご覧ください:チュートリアル: Lua String Magic
コーディングを続ける................:)
-- C strtok と同様に、区切り文字をもう 1 つ使用して分割します (区切り文字を含まないすべての文字列を検索します)。
function split(source, delimiters)
local elements = {}
local pattern = '([^'..delimiters..']+)'
string.gsub(source, pattern, function(value) elements[#elements + 1] = value; end);
return elements
end
-- 例: var elements = split("bye# bye, miss$ american@ pie", ",#$@ ") -- "bye" "bye" "miss" "american" "pie" を返す
これは私がメディアウィキでそれを行う方法です:
str = "cat,dog"
local result = mw.text.split(str,"%s*,%s*")
-- result[0] will give "cat", result[1] will give "dog"
実際、スペースを気にしない場合は、次を使用できます。
str = "cat,dog"
local result = mw.text.split(str,",")
-- result[0] will give "cat", result[1] will give "dog"
ここで使用される API は、Scribunto MediaWiki 拡張機能で実装されています。ここにsplit()
メソッドのリファレンス ドキュメントがあり、ここにそのソース コードがあります。Scribunto の Lua 共通ライブラリの他の多くの機能に依存しているため、実際に MediaWiki を使用している場合、または Scribunto 共通ライブラリのほとんどをインポートする予定がある場合にのみ機能します。
LPEGstring.split()
で文字列操作を表現できるため、Lua ではのような関数はほとんど不要です。それでも専用の関数が必要な場合は、カスタム スプリッターを派生できるスプリッター ファクトリ (以下のスニペット) を定義するのが便利な方法です。mk_splitter()
local lpeg = require "lpeg"
local lpegmatch = lpeg.match
local P, C = lpeg.P, lpeg.C
local mk_splitter = function (pat)
if not pat then
return
end
pat = P (pat)
local nopat = 1 - pat
local splitter = (pat + C (nopat^1))^0
return function (str)
return lpegmatch (splitter, str)
end
end
LPEG を使用する利点は、関数が有効な Lua 文字列とパターンの両方を引数として受け入れることです。
これを使用して、文字列を文字で分割する関数を作成する方法を次に示します,
。
commasplitter = mk_splitter ","
print (commasplitter [[foo, bar, baz, xyzzy,]])
print (commasplitter [[a,b,c,d,e,f,g,h]])