私はこのようなものを探していましたが、ループを避け、できればワンライナーとして使用しました。最終的に、lua-users wikiからこの例を見つけました:Split Join:
fields = {str:match((str:gsub("[^"..sep.."]*"..sep, "([^"..sep.."]*)"..sep)))}
...これはまさに私が望む種類の構文です-1つのライナー、テーブルを返します-ただし、何が起こっているのか本当に理解していません:/
それでも、少し突っ込んだ後、分割する正しい構文を見つけることができましたこのイディオムを持つ文字に変換します。これは明らかに次のとおりです。
fields = { str:match( (str:gsub(".", "(.)")) ) }
どうなるかというと、基本的には各文字gsub
を括弧' 'で囲んでいるので、それらを別々の一致単位と見なし、それらも別々の単位として「抽出」します...しかし、それでも理由がわかりませんピースの周りに余分な括弧のペアがありますか。(.)
.
match
str:gsub(".", "(.)")
私はこれをLua5.1でテストしました:
str = "a - b - c"
fields = { str:match( (str:gsub(".", "(.)")) ) }
print(table_print(fields))
...どこtable_print
からですlua-userswiki:テーブルのシリアル化; そして、このコードは次のように出力します。
"a"
" "
"-"
" "
"b"
" "
"-"
" "
"c"