Lua 学习笔记(六) —— 字符串操作
2015-08-24来源:

定义

例子

x = string.match("1001 is a Robot","001") print(x) --> 001 x = string.match("1001 is a Robot","%d%d") print(x) --> 10

string.gmatch(s,pattern)

返回一个迭代函数,该函数每执行一次,就返回下一个捕捉到的匹配(如果没有使用捕捉,就返回整个匹配结果)。

例子

for s in string.gmatch("I have a Dream.","%a+") do print(s) end --> I --> have --> a --> Dream

t = {} s = "name=tangyikejun, number=20250001" -- 将捕获的两个子串分别作为键和值放到表t中 for k, v in string.gmatch(s, "(%w+)=(%w+)") do t[k] = v end -- 输出表t for k,v in pairs(t) do print(k,v) end --> name tangyikejun --> number 20250001

string.format(formatstring,...)

返回格式化之后的字符串。

定义

例子

string.format("My name is %s", "tangyikejun") --> My name is tangyikejun

string.len(s)

返回字符串长度

string.lower(s)

返回小写字母的字符串

string.upper(s)

返回大写字母的字符串

string.rep(s,n)

对字符串进行重复

定义

string.rep([字符串],[重复次数])

例子

string.rep("Hello",4) -- HelloHelloHelloHello

string.reverse(s)

返回反转后的字符串。

string.sub(s,i[,j])

返回子字符串。

定义

string.sub([字符串],[开始字符下标],[结束字符下标]=-1)

例子

x = string.sub("tangyikejun",7) print(x) --> kejun x = string.sub("tangyikejun",1,-6) print(x) --> tangyi

string.gsub(s,pattern,repl[,n])

根据模式匹配对字符串中每一个匹配部分都做替换处理,返回替换后的字符串。

定义

string.gsub([字符串],[模式匹配],[替换字符],[最大替换次数] = 无限制)

repl 参数([替换字符])支持 字符串、表、函数。

如果 repl 是字符串,那么该字符串就是用于替换的字符串。同时支持 %n 转义符操作,n 的范围是 0-9。n 范围为 [1,9] 时表示第 n 个捕获的匹配字符串,%0 表示整个匹配的字符串,%% 表示替换为一个 %。

如果 repl 是表,那么将捕获的第一个字符串作为键值(Key)进行查询(没有定义捕捉则以整个匹配的字符串为键值),查到的值作为替换的字符串。

如果 repl 是函数,那么每次匹配成功都会调用该函数,并以按序以所有捕捉作为参数传入函数。没有捕捉则以整个匹配的字符作为参数。

如果从表或函数得到是字符串或者是数字,就将其用于替换;如果得到的是 false 或 nil,那么匹配部分将不会发生变化。

例子

repl 为字符串

s = "Never say die." x = string.gsub(s,"die","never") --> Never say never. x = string.gsub(s,"die","'%0'") --> Never say 'die'. x = string.gsub(s,"(%a+)%s%a+%s(%a+)","%2") --> die.

限制最大替换次数

s = "never say never." x = string.gsub(s,"never","Never",1) --> Never say never.

repl 是表

t = {name="Lua",version="5.1"} x = string.gsub("$name-$version.tar.gz","$(%a+)",t) --> Lua-5.1.tar.gz

repl是函数

x = string.gsub("4+5 = $return 4+5$","%$(.-)%$",function(s)return loadstring(s)() end) --> 4+5 = 9 x = string.gsub("23+45=$result", "((%d+)%+(%d+)=)%$%a+", function (s,a,b) sum = a+b return s..sum end) --> 23+45=68

~~注意:似乎只支持匿名函数。~~

从表或函数返回的是 false 或 nil

x = string.gsub("4+5 = $return 4+5$","%$(.-)%$",function(s)return nil end) --> 4+5 = $return 4+5$ t = {name="Lua",version=false} x = string.gsub("$name-$version.tar.gz","$(%a+)",t) --> Lua-$version.tar.gz

string.byte(s[,i[,j]])

返回字符的 ASCII 码值。

定义

string.byte([字符串],[起始下标]=1,[结束下标]=[起始下标])

例子

x,y,z = string.byte("abc",2) --> 98 nil nil x,y,z = string.byte("abc",1,3) --> 97 98 99

string.char(...)

根据传入的 ASCII 编码值([0-255])得到对应的字符,传入多少编码值就返回多长的字符串。

例子

x = string.char(98,99,100) --> bcd

如果输入字符超限会编译报错。

string.dump(function)

返回函数的二进制表示(字符串形式),把这个返回值传给 loadingstring 可以获得函数的一份拷贝(传入的函数必须是没有上值的 Lua 函数)。

例子

function sum(a,b) return a + b end s = string.dump(sum) x = loadstring(s)(4,4) -- 8

更多信息请查看IT技术专栏

推荐信息
Baidu
map