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 | local sString = "321dlkoinmlda" |
string.format
string.format(s,i)和C语言的printf几乎一模一样,十进制d 十六进制x 八进制o 浮点数f
1 | pi = 3.014159625 |
结合模式串达到最优使用
1 | local s = "hello theee %d world~~~ %s" |
string.find
string.find(s.i)查找字符串s中i字符串的对应的位置,返回的是起始和结束索引值
s:目标串
i:搜索匹配的字符串
1 | s = "hello world" |
string.gsub
string.gsub(s,i,j)
s:目标字符(要被操作的字符串)
i:模式串(即将被替换掉的字符串)
j:替换串(新的,要替换i的字符串)
只有一个返回值,就是被替换完成后的最终字符串
1 | s = string.gsub("Lua is cute","cute","greet") |
可以匹配一个特定字符集合内任何字符的模式项
1 | print(stirng.gsub("hello,up-down!","%A",".")) -- hello.up.down. |