(1)string字符串
1、字符串连接符".."
使用".."符号可以将两个字符串相连接,等价于C#或Java中的string a + string b,如果“..”两边有一个是数字的话,".."操作符会把数字变成字符串
输出
2、Lua的字符串包含string库,可以借助string库函数来便捷地使用string
输出
3、模式
模式(pattern)是用来替代一种指定集合的分类,比如在c语言中常见的scanf("%d",&a)、printf("%d\n",a)中的"%d"就是一种模式,在程序进行编译时它用于替代所有的int类型。
常用的几种模式
. | 所有字符 |
%a | 字母 |
%c | 控制字符 |
%d | 数字 |
%l | 小写字母 |
%p | 标点符号 |
%s | 空白字符(也可以是字符串) |
%u | 大写字母 |
%w | 字母和数字字符 |
%x | 十六进制数字 |
%z | 内部表示为0的字符 |
除了这些分类,还有大写字母的分类,大写字母的分类表示了上述分类的补集。
%A | 非字母 |
%C | 非控制字符 |
%D | 非数字 |
%L | 非小写字母 |
%P | 非标点符号 |
%S | 非空白字符 |
%U | 非大写字母 |
%W | 非字母和数字字符 |
%X | 非十六进制数字 |
%Z | 内部不表示为0的字符 |
举些例子
输出(第二行的"12"是gsub方法的第二个返回值,表示替换了12次)
除了上面两个分类,还有一些,它们被称作魔法字符
%( | 字符'(' |
%) | 字符')' |
%. | 字符'.' |
%% | 字符'%' |
%+ | 字符'+' |
%- | 字符'-' |
%* | 字符'*' |
%? | 字符'?' |
%[ | 字符'[' |
%] | 字符']' |
%^ | 字符'^' |
%$ | 字符'$' |
示例
输出
4、模式扩展1-字符集
字符集实际上是模式的扩展,在一对方括号内将不同的字符分类或单个字符组合起来,即可创建出属于用户自己的字符分类,这种新的字符分类就是字符集(lua的设计还是相当强大的)。比如字符集"[%a_]"表示同时匹配字母、下划线;字符集"[0-1]"表示匹配二进制数字;字符集"[0-7]"表示匹配八进制数字;字符集"[^0-7]"表示匹配非八进制数字。
示例
输出
5、模式扩展2-修饰符
lua提供4中修饰符来配合模式使用
+ | 重复1次或多次 |
* | 重复0次或多次 |
- | 重复0次或多次 |
? | 出现0次或1次 |
比如"+"修饰符可以匹配属于字符分类的一个或多个字符。它总是获取与模式相匹配的最长序列。
示例
输出
6、string库表
string库表参考自http://blog.sina.com.cn/s/blog_6d9d6d160101975u.html
【基本函数】
函数 | 描述 | 示例 | 结果 |
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 | returns substring from index i to j of s | 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.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("abcd\t\n","%c%c") | 5 6 |
%C | 非控制字符 | string.find("\t\nabcd","%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 |
--------------------------------------------------------------------------------------------------
【用[]创建字符集,"-"为连字符,"^"表示字符集的补集】
字符类 | 描述 | 示例 | 结果 |
[01] | 匹配二进制数 | string.find("32123","[01]") | 3 3 |
[AB][CD] | 匹配AC、AD、BC、BD | string.find("ABCDEF","[AB][CD]") | 2 3 |
[[]] | 匹配一对方括号[] | string.find("ABC[]D","[[]]") | 4 5 |
[1-3] | 匹配数字1-3 | string.find("312","[1-3][1-3][1-3]") | 1 3 |
[b-d] | 匹配字母b-d | string.find("dbc","[b-d][b-d][b-d]") | 1 3 |
[^%s] | 匹配任意非空字符 | string.find(" a ","[^%s]") | 3 3 |
[^%d] | 匹配任意非数字字符 | string.find("123a","[^%d]") | 4 4 |
[^%a] | 匹配任意非字母字符 | string.find("abc1","[^%a]") | 4 4 |
--------------------------------------------------------------------------------------------------
【用"()"进行捕获】
字符类 | 描述 | 示例 | 结果 |
() | 捕获字符串 | string.find("12ab","(%a%a)") | 3 4 ab |
string.find("ab12","(%d%d)") | 3 4 12 |
--------------------------------------------------------------------------------------------------
【模式修饰符】
修饰符 | 描述 | 示例 | 结果 |
+ | 表示1个或多个,匹配最多个 | string.find("aaabbb","(a+b)") | 1 4 aaab |
string.find("cccbbb","(a+b)") | nil | ||
- | 表示0个或多个,匹配最少个 | string.find("zzxyyy","(xy-)") | 3 3 x |
string.find("zzzyyy","(x-y)") | 4 4 y | ||
* | 表示0个或多个,匹配最多个 | string.find("mmmnnn","(m*n)") | 1 4 mmmb |
string.find("lllnnn","(m*n)") | 4 4 n | ||
? | 表示0个或1个 | string.find("aaabbb","(a?b)") | 3 4 ab |
string.find("cccbbb","(a?b)") | 4 4 b |
(2)math库
math库参考自http://blog.sina.com.cn/s/blog_61dfab6b01015qh4.html
函数名 | 描述 | 示例 | 结果 |
pi | 圆周率 | math.pi | 3.1415926535898 |
abs | 取绝对值 | math.abs(-2012) | 2012 |
ceil | 向上取整 | math.ceil(9.1) | 10 |
floor | 向下取整 | math.floor(9.9) | 9 |
max | 取参数最大值 | math.max(2,4,6,8) | 8 |
min | 取参数最小值 | math.min(2,4,6,8) | 2 |
pow | 计算x的y次幂 | math.pow(2,16) | 65536 |
sqrt | 开平方 | math.sqrt(65536) | 256 |
mod | 取模 | math.mod(65535,2) | 1 |
modf | 取整数和小数部分 | math.modf(20.12) | 20 0.12 |
randomseed | 设随机数种子 | math.randomseed(os.time()) | |
random | 取随机数 | math.random(5,90) | 5~90 |
rad | 角度转弧度 | math.rad(180) | 3.1415926535898 |
deg | 弧度转角度 | math.deg(math.pi) | 180 |
exp | e的x次方 | math.exp(4) | 54.598150033144 |
log | 计算x的自然对数 | math.log(54.598150033144) | 4 |
log10 | 计算10为底,x的对数 | math.log10(1000) | 3 |
frexp | 将参数拆成x * (2 ^ y)的形式 | math.frexp(160) | 0.625 8 |
ldexp | 计算x * (2 ^ y) | math.ldexp(0.625,8) | 160 |
sin | 正弦 | math.sin(math.rad(30)) | 0.5 |
cos | 余弦 | math.cos(math.rad(60)) | 0.5 |
tan | 正切 | math.tan(math.rad(45)) | 1 |
asin | 反正弦 | math.deg(math.asin(0.5)) | 30 |
acos | 反余弦 | math.deg(math.acos(0.5)) | 60 |
atan | 反正切 | math.deg(math.atan(1)) | 45 |