string库提供了Lua操作字符串的基本功能。
- str=string.upper("a??o") --小写转大写
- print(str)
- str=string.lower("BBB") --大写转小写
- print(str)
- str="hello world"
- print(string.len(str)) --字符串长度
- print(string.rep("a",4)) --重复打印a,4此
- s="[hello world]"
- print(string.sub(s,5,-4)) --截取字符串,5正数第五个,-4倒数第四个
- print(string.char(97)) --> a --ASCII码
- i = 99;
- print(string.char(i, i+1, i+2)) --> c,d,e
- print(string.byte("abc")) --> 97
- print(string.byte("abc", 2)) --> 98 --2是第二个
- print(string.byte("abc", -1)) -->99 -- -1是倒数第一个
- print(string.format("pi = %.4f", PI)) --> pi = 3.1416 --format格式化
- d = 5; m = 11; y = 1990
- print(string.format("%02d/%02d/%04d", d, m, y)) --> 05/11/1990
- tag, title = "h1", "a title"
- print(string.format("<%s>%s</%s>", tag, title, tag)) --> <h1>a title</h1>
模式匹配函数:string.find字符串查找,
string.gsub全局字符串替换,
string.gfind全局字符串查找
- s = "hello world"
- i, j = string.find(s, "hello") --i 就开始位置,j 结束位置
- print(i, j) --> 1 5
- print(string.sub(s, i, j)) --> hello
- print(string.find(s, "world")) --> 7 11
- i, j = string.find(s, "l")
- print(i, j) --> 3 3
- print(string.find(s, "lll")) --> nil
- ------------------------------------------------------------------------
- --大写字母表示集合的补集 %A代表非字母的字符
- . 任意字符
- %a 字母
- %c 控制字符
- %d 数字
- %l 小写字母
- %p 标点字符
- %s 空白符
- %u 大写字母
- %w 字母和数字
- %x 十六进制数字
- %z 代表 0 的字符
- -------------------------------------------------------
- print(string.gsub("hello, up-down!", "%A", ".")) --> hello..up.down. 4(代码替换的次数)
- ------------------------------------------------------
- + 匹配前一字符 1 次或多次
- * 匹配前一字符 0 次或多次
- - 匹配前一字符 0 次或多次
- ? 匹配前一字符 0 次或 1 次
- -----------------------------------------------------
- i, j = string.find("the number 1298 is even", "%d+") --匹配数字
- print(i,j) --> 12 15
- test = "int x; /* x */ int y; /* y */"
- print(string.gsub(test, "/%*.*%*/", "<COMMENT>")) -- .*最长匹配
- ---------------------------------------------------------
- test = "int x; /* x */ int y; /* y */"
- print(string.gsub(test, "/%*.-%*/", "<COMMENT>")) -- .-最短匹配
- ----------------------------------------------------------
- if string.find(s, "^%d") then -- ^匹配开始部分 $匹配结尾部分
- if string.find(s, "^[+-]?%d+$") then -- ?匹配一个字符0次或1次
- print(string.gsub("a (enclosed (in) parentheses) line", "%b()", ""))
- -- %b匹配对称字符%b xy,以x开始,y结束 %b()以(开始 ,)结束
捕获Captures:
- pair = "name = Anna"
- _, _, key, value = string.find(pair, "(%a+)%s*=%s*(%a+)")
- print(key, value) --> name Anna
转换的技巧(TTrriicckkss ooff tthhee TTrraaddee):
- function nocase (s)
- s = string.gsub(s, "%a", function (c)
- return string.format("[%s%s]", string.lower(c),
- string.upper(c))
- end)
- return s
- end
- print(nocase("Hi there!"))