文字列型は "", '' で囲む
local s = "test"
local s = 'test'
-- 複数行にまたがるには [[ ]] でくくる
local s = [[message
test]]
■ 連結
■ 長さ
# でバイト数を返す
-- 3
print ( #"aaa" )
-- 6( SJIS )
print ( #"あいう" )
-- 9( utf8 )
print ( #"あいう" )
-- 3
string.len( "abc" )
-- 9( utf8 )
string.len( "あいう" )
■ 変換
"test" .. tostring( 1 )
-- 暗黙的に変換される
"test" .. 1
-- Escape 文字使用可能
"foo\n" | 'bar\t'
[[c:\foo\bar]]
[[c:\foo
\bar]]
■ 分割(split)
SYNTAX
string.gmatch( string, pattern )
DESC
split がないため gmatch で代用する。
gmatch はマッチしたすべての要素を順に返すイテレータ関数を返すため
for - in と併用して文字列を分割する。
local s = "d:/foo/bar/goo.txt";
local a = {}
for w in string.gmatch(s, "[^/]+") do
table.insert(a, w);
end
for i=1, #a, 1 do
print ( i .. " = " .. (a[i]) )
end
■ 部分文字列
string.sub( string, s, e )
local ret = string.sub( "aaa___bbb", 1, 3 );
-- 7番目より後ろ
local ret = string.sub( "aaa___bbb", 7 );
print( ret );
■ match(検索)
SYNTAX
string.match( string, pattern [, index ] )
DESC
pattern にマッチする文字列を string から返す。
index が指定された場合は index の位置から検索をする。
-- RET hello
local ret = string.match("hello world", "%w+")
-- RET f
string.match( "foobar", "[a-z]" );
■ find(インデックス検索)
SYNTAX
string.find( string, regexp [, index ] )
RET
start, end : マッチした文字列の開始, 終了位置インデックス
nil : マッチしない場合
DESC
regexp にマッチする文字列を string から検索して
開始、終了の index を返す。
index が指定された場合は index の位置から検索をする。
-- 1, 4
s, e = string.find( "test", "%a*");
-- 4, 6
local s, e = string.find ( "aaa___bbb", "___" )
-- 拡張子を返す
path = "d:/foo/test.txt"
local idx = string.find( path, '%.' )
local ext = string.sub( path, 0, idx - 1 )
-- 1, 3
local path = "c:/foo.txt"
local s, e = string.find( path, "[Cc]:/" );
string.upper();
string.lower();
string string.format("string %s", s)
%-12s : 左寄せ.
%+12d : [+-] 記号.
string.gsub( s, ptn, d[, n] )
s = string.gsub( "foo", "[a-z]", "c" );
string.len( s );
string.rep( s, n ); -- repeat
■ 反転
-- "cba"
string.reverse( "abc" )