Lua标准库

string库概念

lua解释器对字符串支持有限,一个程序可以创建字符并连接字符串,但是不能截取子串,检查字符串的大小,内容等,操作字符串的功能基本来自string库

lua5.1中字符串库的所有函数如下

函数 | 描述 | 示例 | 结果
—|—|—|—
len | 计算字符串长度 | string.len(“abcd”) | 4
rep | 返回字符串s的n个拷贝 | string.rep(“abcd”,2) | abcdabcd
lower | 返回字符串全部字母大写 | string.lower(“AbcD”) | abcd
upper | 返回字符串全部字母小写 | string.upper(“AbcD”) | ABCD
format | 返回一个类似printf的格式化字符串 | string.format(“the value is:%d”,4) | the value is:4
sub | 返回i到n的字符串 | string.sub(“abcd”,2) | bcd
| | string.sub(“abcd”,-2) | cd
| | string.sub(“abcd”,2,-2) | bc
| | string.sub(“abcd”,2,3) | bc
find | 在字符串中查找 | string.find(“cdcdcdcd”,”ab”) | nil
| | string.find(“cdcdcdcd”,”cd”) | 1 2
| | string.find(“cdcdcdcd”,”cd”,7) | 7 8
gsub | 在字符串中替换 | string.gsub(“abcdabcd”,”a”,”z”); | zbcdzbcd 2
| | string.gsub(“aaaa”,”a”,”z”,3); | zzza 3
byte | 返回字符的整数形式 | string.byte(“ABCD”,4) | 68
char | 将整型数字转成字符并连接 | string.char(97,98,99,100) | abcd

String库中还可以结合基本的模式串进行应用:

【基本模式串】可以匹配一个特定字符集合内任何字符的模式项

字符类 描述 示例 结果
. 任意字符 string.find(“”,”.”) nil
%s 空白符 string.find(“ab cd”,”%s%s”) 3 4
%S 非空白符 string.find(“ab cd”,”%S%S”) 1 2
%p 标点字符 string.find(“ab,.cd”,”%p%p”) 3 4
%P 非标点字符 string.find(“ab,.cd”,”%P%P”) 1 2
%c 控制字符 string.find(“abcdtn”,”%c%c”) 5 6
%C 非控制字符 string.find(“tnabcd”,”%C%C”) 3 4
%d 数字 string.find(“abcd12”,”%d%d”) 5 6
%D 非数字 string.find(“12abcd”,”%D%D”) 3 4
%x 十六进制数字 string.find(“efgh”,”%x%x”) 1 2
%X 非十六进制数字 string.find(“efgh”,”%X%X”) 3 4
%a 字母 string.find(“AB12”,”%a%a”) 1 2
%A 非字母 string.find(“AB12”,”%A%A”) 3 4
%l 小写字母 string.find(“ABab”,”%l%l”) 3 4
%L 大写字母 string.find(“ABab”,”%L%L”) 1 2
%u 大写字母 string.find(“ABab”,”%u%u”) 1 2
%U 非大写字母 string.find(“ABab”,”%U%U”) 3 4
%w 字母和数字 string.find(“a1()”,”%w%w”) 1 2
%W 非字母和数字 string.find(“a1()”,”%W%W”) 3 4

【转义字符%】

       
% 转义字符 string.find(“abc%..”,”%%”) 4 4
  string.find(“abc..d”,”%.%.”) 4 5  

LUA中【模式修饰符】

   
+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次
- 匹配前一字符0次或多次
匹配前一字符0次或1次
^ 匹配目标串的开始部分
$ 匹配目标串的结尾部分

string.len

string.len(s)返回字符串s的长度

1  
2  
local sString = "321dlkoinmlda"  
print("sString字符串的长度为:"..string.len(sString))       

—|—

string.format

string.format(s,i)和C语言的printf几乎一模一样,十进制d 十六进制x 八进制o 浮点数f

1  
2  
3  
4  
5  
6  
pi = 3.014159625  
print(string.format("pi = %.4f",pi))     --pi = 3.0142  
d=5;m=11;y=1990  
print(string.format("%02d/%02d/%04d"),d,m,y)     -- 05/11/1990  
tag,title = "hi","a title"  
print(string.format("<%s>%s<%s>"),tag,title,tag)     --<hi>a title<hi>  

—|—

结合模式串达到最优使用

1  
2  
local s = "hello theee %d world~~~ %s"  
print(string.format(s,100,"!!!!"))     -- hello theee 100 world~~~ !!!!  

—|—

string.find

string.find(s.i)查找字符串s中i字符串的对应的位置,返回的是起始和结束索引值
s:目标串
i:搜索匹配的字符串

1  
2  
3  
4  
5  
6  
7  
8  
s = "hello world"  
i,j = string.find(s,"hello")  
print(i,j)     -- 1 5  
print(string.sub(s,i,j))     -- hello(把s字符串从i到j出截取出来)  
print(string.find(s,"world"))     -- 7 11  
i,j = string.find(s,"l")  
print(i,j)     --3 3  
print(string.find(s,"lll"))     -- nil  

—|—

string.gsub

string.gsub(s,i,j)
s:目标字符(要被操作的字符串)
i:模式串(即将被替换掉的字符串)
j:替换串(新的,要替换i的字符串)
只有一个返回值,就是被替换完成后的最终字符串

1  
2  
3  
4  
5  
6  
s = string.gsub("Lua is cute","cute","greet")  
print(s)     -- Lua is great  
s = string.gsub("all lii","l","x")  
print(s)     -- axx xii  
s = stirng.gsub("Lua is greet","perl","tcl")  
print(s)     -- Lua is greet  

—|—

可以匹配一个特定字符集合内任何字符的模式项

1  
print(stirng.gsub("hello,up-down!","%A","."))     -- hello.up.down.  

—|—

糖果

糖果
LUA教程

如果不小心安装错 SQL Server 为 Evaluation 的版本,要小心当超过 180 天之后,系统就会无法正常使用了 这几天遇到一个蛮特别的案例,原本收到的问题是 “维护计划” 忽然无法使用,即便是里面没有任何的Task,都无法顺利地执行。但从对方所提供的错误消...… Continue reading

PLUM NIZ静电容键盘怎么样?

Published on September 25, 2020

程序员如何选择合适的机械键盘

Published on September 18, 2020