*Luaライブラリ 要注意点 ~正規表現ライブラリライブラリ~ [#y82939dd] > #sh(lua]){{ s = "hello world" i, j = string.find(s, "hello") print(i, j) ---> 1, 5 s.sub(1,5) ---> "hello" }} **string.find(str, pattern, init, plain) [#x88b19a6] >~ |str|文字列型|文字列strの先頭から、パターンpatternに合致する部分を探します。&br;合致する部分が見つかったときには、文字列の先頭が1として、その部分の先頭、最後の位置の2つの数値を戻り値として返します。&br;合致する部分が見つからないときにはnilを返します。| |pattern|文字列型または正規表現オブジェクト|また、patternがキャプチャを持っている場合には、キャプチャされた文字列は、位置を表す2つの数値に続く戻り値として返されます。| |init|数値型(FIXNUM)|3つ目の引数initを指定した場合には、パターンpatternを探し始める場所を先頭ではなく、init文字目から始めることができます。&br;initには負の数も指定でき、その場合は末尾から何文字目、という形になります。| |plain|論理型|4つめの引数plainにtrueを指定した場合には、patternはパターンではなく単なる文字列であると解釈されます。&br;したがって、patternに単純に一致する部分を探すようになります。| #sh(lua){{ table.sort ( tbl, function (a, b) return string.lower(a) < string.lower(b) -- 両方小文字にしたものを比較 end ) }} **string.sub (s, i [, j]) [#e2739ca6] >文字 s[i], s[i+1], ..., s[j] の内部コードの数値を返す。~ 文字列 s の、位置 i から位置 j までの部分文字列を返す。~ i にも j にも、負の値を使える。~ j が省略されたときは -1 とみなされる~ (つまり文字列の長さと同じ)。特に、string.sub(s,1,j) は s の先頭から j 文字を取り出し、~ string.sub(s, -i) は s の最後の i 文字を取り出す。 **{s:byte(1,-1)}とstring.char(unpack(t)) [#f2c54682] >~ #sh(lua){{ {s:byte(1,-1)} }} で、sに含まれる文字列を全て文字コード化したリストを得ることが出来る。 そして、 #sh(lua){{ string.char(unpack(t)) }} で元の文字列を構築可能。 #sh(lua){{ s = "abc" t = {s:byte(1, -1)} t[1] = t[1] + 1 print(string.char(unpack(t))) --> "bbc" }} **string.format (formatstring, e1, e2, ...) [#dc2a0bb6] >(スクリプト言語で、Cファミリーのprintf系譜を持つのは、すでにかなりレガシーな臭いが漂うが…)~ ~ 最初の引数 (文字列でなければならない) で指定された記述に従い、残りの可変個の引数を書式化して返す。~ 書式文字列は標準C関数のprintfファミリーと同じルールに従う。~ ''ただし、 *、l、L、n、p、h はサポートされてなくて、追加の q がある点だけが異なる。''~ q オプションは、Luaインタプリタで安全に読み戻せる適切な形式の文字列に書式化する。~ ~ その文字列はダブルクォートの間に書かれ、文字列中のダブルクォート、改行、埋め込まれたゼロ、~ バックスラッシュは正しくエスケープされる。~ #sh(lua){{ string.format('%q', 'a string with "quotes" and \n new line') -- "a string with \"quotes\" and \ -- new line" }} ''c、d、E、e、f, g、G、i、o、u, X、x はすべて数値の引数を期待し、'' ''q と s は文字列を期待する。''