--*********当取(.-)时,一开始先匹配一个[,0个或多个=号,一个[,尽可能少的内容直到遇到'第'一个]
--*********0个或多个=号,一个],停止匹配*************--
p = "%[(=*)%[(.-)%]%1%]"
s = "a = [=[[[ something ]] ]=] ]=];print(a)"
print(string.match(s,p))print(string.gsub(s,"%[(=*)%[(.-)%]%1%]","%1"))
--*********当取(.-)时,一开始先匹配一个[,0个或多个=号,一个[,尽可能少的内容直到遇到'最后'一个]
--*********0个或多个=号,一个],停止匹配*************--
p = "%[(=*)%[(.-)%]%1%]"
s = "a = [=[[[ something ]] ]=] ]=];print(a)"
print(string.match(s,p))
print(string.gsub(s,"%[(=*)%[(.+)%]%1%]","%1"))
--**************模式中有两个()(),所以,替换的子串:%1表示捕获的第一个内容,%2表示捕获的第二个内容*********--
s = string.gsub([[the \quote{task} is to \em{change} that]],"\\(%a+){(.-)}","<%1>%2%1>");--两个括号所以又两次内容“%1”表示第一个捕获
到的子窜,匹配模式里要用()括起来才算是捕获到的内容。(quote)第一个子窜,(change)第二个子窜
print(s);
--******************[^%s*(.-)%s*$]表示这个模式的补集,^%s*(.-)%s*$表示以‘空格为开头,任意内容,以空格结尾’
s = " hello from lua,i come from china kk \n jjj"
function trim(s)
return string.gsub(s,"^%s*(.-)%s*$","%1=");--括号里面捕获到第一次内容
end
print(trim(s))
--*****************对字符串表模式的理解******************--
function expand(s)
s = string.gsub(s, "%$(%w+)",function(n)
return _G[n];
end);
return s;
endname = "Lua"; status = "great";
print(expand("$name is $status, isn't it?"));
--*********************捕获模式中对括号的理解************--
function toxml (s)
s = string.gsub(s,"\\(%a+)(%b{})",function(tag,body)--两个括号,表示捕获到两个参数,传给function
print("0",tag,body)
body = string.sub(body,2,-2)
print("1",body)
body = toxml(body)
print("2",body)
return string.format("<%s>%s%s>",tag,body,tag)
end
)
return s
end
m=[[\title{The \bold{big} example}]]
print(toxml(m))
--*************URL的译码与解码******************--
function escape(s)
s = string.gsub(s,"([&=+%c])",function(c)
return string.format("%%%02X",string.byte(c))
end)
s = string.gsub(s, " ","+");
return s;
endfunction encode(t)
local s = "";
for k,v in pairs(t) do
s = s.."&"..escape(k).."="..escape(v);
end
return string.sub(s,2);
endt = {name = "a1",query = "a+b = c",q = "yes or no"};
print(encode(t));
--********字符串的双引号中包含转义的引号,如何处理****************--
m = [[follow a typical:"This is \"great\"!"]]
function code(s)
return (string.gsub(s,"\\(.)",function(x)
return string.format("\\%03d",string.byte(x))
end))
endfunction decode (s)
return (string.gsub(s,"\\(%d%d%d)",function(d)
return "\\"..string.char(d)
end))
end
print(code(m))
kk = code(m)
- print(decode(kk))