Lua基础:String库

string库提供了Lua操作字符串的基本功能。

  1. str=string.upper("a??o")    --小写转大写
  2. print(str)
  3. str=string.lower("BBB")  --大写转小写
  4. print(str)
  5. str="hello world"         
  6. print(string.len(str))      --字符串长度
  7. print(string.rep("a",4))   --重复打印a,4此
  8. s="[hello world]"  
  9. print(string.sub(s,5,-4))     --截取字符串,5正数第五个,-4倒数第四个
  10. print(string.char(97)) --> a     --ASCII码
  11. i = 99;
  12. print(string.char(i, i+1, i+2)) --> c,d,e
  13. print(string.byte("abc"))      --> 97
  14. print(string.byte("abc", 2))    --> 98   --2是第二个
  15. print(string.byte("abc", -1))  -->99    -- -1是倒数第一个
  16.  
  17. print(string.format("pi = %.4f", PI))   --> pi = 3.1416   --format格式化
  18. d = 5; m = 11; y = 1990 
  19. print(string.format("%02d/%02d/%04d", d, m, y))  --> 05/11/1990 
  20. tag, title = "h1", "a title"
  21. print(string.format("<%s>%s</%s>", tag, title, tag))   --> <h1>a title</h1>

模式匹配函数:string.find字符串查找,

                            string.gsub全局字符串替换,

                            string.gfind全局字符串查找

  1. s = "hello world"
  2. i, j = string.find(s, "hello")  --i  就开始位置,j  结束位置
  3. print(i, j) --> 1 5
  4. print(string.sub(s, i, j)) --> hello
  5. print(string.find(s, "world")) --> 7 11
  6. i, j = string.find(s, "l")
  7. print(i, j) --> 3 3
  8. print(string.find(s, "lll")) --> nil
  9. ------------------------------------------------------------------------
  10. --大写字母表示集合的补集  %A代表非字母的字符
  11. .     任意字符
  12. %a     字母
  13. %c     控制字符
  14. %d     数字
  15. %l     小写字母
  16. %p     标点字符
  17. %s     空白符
  18. %u     大写字母
  19. %w     字母和数字
  20. %x     十六进制数字
  21. %z     代表 0 的字符
  22. -------------------------------------------------------
  23. print(string.gsub("hello, up-down!", "%A", "."))     --> hello..up.down. 4(代码替换的次数) 
  24. ------------------------------------------------------
  25. + 匹配前一字符 1 次或多次
  26. * 匹配前一字符 0 次或多次
  27. - 匹配前一字符 0 次或多次
  28. ? 匹配前一字符 0 次或 1 次
  29. -----------------------------------------------------
  30. i, j = string.find("the number 1298 is even", "%d+")   --匹配数字
  31. print(i,j)        --> 12 15
  32.  
  33. test = "int x; /* x */ int y; /* y */"
  34. print(string.gsub(test, "/%*.*%*/", "<COMMENT>"))  --  .*最长匹配
  35. ---------------------------------------------------------
  36. test = "int x; /* x */ int y; /* y */"
  37. print(string.gsub(test, "/%*.-%*/", "<COMMENT>"))  --  .-最短匹配
  38. ----------------------------------------------------------
  39. if string.find(s, "^%d") then   --  ^匹配开始部分 $匹配结尾部分
  40. if string.find(s, "^[+-]?%d+$") then  --  ?匹配一个字符0次或1次
  41. print(string.gsub("a (enclosed (in) parentheses) line",  "%b()", "")) 
  42.    --  %b匹配对称字符%b xy,以x开始,y结束 %b()以(开始 ,)结束 

捕获Captures:

  1. pair = "name = Anna"
  2. _, _, key, value = string.find(pair, "(%a+)%s*=%s*(%a+)") 
  3. print(key, value)                                             --> name Anna 

转换的技巧(TTrriicckkss ooff tthhee TTrraaddee):

  1. function nocase (s) 
  2.  s = string.gsub(s, "%a", function (c) 
  3.  return string.format("[%s%s]", string.lower(c), 
  4.  string.upper(c)) 
  5. end) 
  6. return s 
  7. end 
  8. print(nocase("Hi there!"))

猜你喜欢

转载自blog.csdn.net/QQhelphelp/article/details/88114797