Lua文法小贴士(三)魔法文字


Luaの魔法文字には、次のものが含まれています.
. % + * - ? [ ] ^ ( ) $
文字列をパターンマッチングするには、文字列を使用します.
モードシンボル:
.
すべての文字
%a
文字
%c
コントロールキャラクタ
%d
数値
%l
小文字
%p
句読点
%s
空白文字
%u
大文字
%w
文字または数字
%x
16進文字
%z
内部表示0のアルファベット
大文字はそれらの補完セットを表し、例えば%Aは非アルファベットを表す
local s = "Today is 11/10/2016"
print(string.match(s,"%d")) --1
print(string.match(s,"%D")) --T

修飾記号:
+
1回以上繰り返す
*
0回以上繰り返し
-
0回以上繰り返し
?
オプション(0回または1回)
例:
local s = "Today is 11/10/2016"
local p = "%d+/%d+/%d+"
print(string.match(s,p)) --11/10/2016

その他の記号:
[]を使用して文字セットを作成します.たとえば、次のようにします.
print(string.match("9 is a number", "[0123456789]")) --9

-記号を使用して簡略化できます.
print(string.match("9 is a number", "[0-9]")) --9

似たような使い方があります.
print(string.match("9 is a number", "[a-nA-N]")) --i

加えて
^
この文字セットを表す補完セット:
print(string.match("9 is a number", "[^a-nA-N0-9 ]")) --s

使用
()
一致する値を個別に取得できます.
local date = "Today is 10/10/2016"
local p = "(%d+)/(%d+)/(%d+)"
local d,m,y = string.match(date,p)
print(d) --10
print(m) --10
print(y) --2016

%加算値は、取得シーケンス番号を示します.
local s = "abcdefg"
print(string.gsub(s,"(%w)(%w)(%w)","%3%2%1")) --cbafedg

例えば、日付フォーマットdd/mm/yyyyをyyyy-mm-ddに変換する
local s = "Tommorow is 11/10/2016"
print(string.gsub(s,"(%d+)/(%d+)/(%d+)", "%3-%2-%1")) --Tommorow is 2016-10-11

%特殊符号を付ける
記号を表す文字:
local s = "[Date]2016-10-10"
local p = "[%[%]%-]"
for w in string.gmatch(s,p) do
    print(w)
end

$
シンボルは変数を表します.たとえば、次のようになります.
name = "Lua"
status = "good"
print(string.gsub("$name is $status", "$(%w+)", _G)) --Lua is good

次に例を示します.
local tbl = {}
tbl.name = "Lua"
tbl.status = "good"
print(string.gsub("$name is $status", "$(%w+)", tbl)) --Lua is good

参照先:
Lua構文小贴士(一)文字列基礎操作
Lua構文小贴士(二)stringライブラリ
Lua文法小贴士(三)魔法文字