- 表示方式
str1 = "可以用双引号表示" str2 = '可以用单引号表示' str3 = [[ <html> <body> <p>可以用双中括号来输出一串字符块</p> </body> </html> ]] print(str1) print(str2) print(str3) --[[ 输出结果: 可以用双引号表示 可以用单引号表示 <html> <body> <p>可以用双中括号来输出一串字符块</p> </body> </html> ]]
- 转义字符:用于表示不能直接显示的字符
- string.upper(arg) --将字符串全部转为大写字母
print(string.upper("abcd789efgh")) --ABCD789EFGH
- string.lower(arg) --将字符串全部转为小写字母
print(string.lower("AAA88BBB")) --aaa88bbb
- string.gsub(str1,str2,str3,num) --替换str1中的str2为str3,num为替换次数(可以忽略,则替换全部str2为str3) 返回替换后的字符串及替换次数
str1 = "hello world hi hello she hello " print(string.gsub(str1,"hello","哈喽")) --哈喽 world hi 哈喽 she 哈喽 3 print(string.gsub(str1,"hello","哈哈",2)) --哈哈 world hi 哈哈 she hello 2
- string.find(str,substr,[init,[end]]) -- 在目标字符串中查找指定内容,返回具体位置(开始下标及截止下标),不存在返回nil
str = "hello world hello lua hello my" print(string.find(str,"hello")) --1 5 (从str第一个字符开始查找,返回找到的第一个匹配的起始下标) print(string.find(str,"hello",10)) --13 17 (从str第10个字符开始查找,返回找到的第一个匹配的起始下标) print(string.find(str,"hellow")) --nil (不存在则返回 nil)
- string.reverse(arg) --字符串反转
print(string.reverse("aabbccd")) --dccbbaa
- string.format(...) -- 字符串格式化
print(string.format("接收一个数字,并将其转化为AsCII码表中对应的字符:%c",65)) -- 65 --> A print(string.format("接受一个数字并将其转化为有符号的整数格式:%d",65)) -- 65 --> 65 (%d 和 %i 一样) print(string.format("接受一个数字并将其转化为有符号的整数格式:%+d",65)) -- 65 --> +65 (正数时会带上+) print(string.format("接受一个数字并将其转化为有符号的整数格式:%05d",65)) -- 65 --> 00065 (表示5位数,不足补0) print(string.format("接受一个数字并将其转化为有符号的整数格式:%5d",65)) -- 65 --> 65 (表示5位数,不足补空格) print(string.format("%-5d接受一个数字并将其转化为有符号的整数格式",65)) -- 65 --> 65 (默认右对齐,加上-则左对齐) print(string.format("接受一个数字并将其转化为有符号的整数格式:%i",-65)) -- -65 --> -65 print(string.format("接受一个数字并将其转化为八进制数格式:%o",65)) -- 65 --> 101 print(string.format("接受一个数字并将其转化为无符号整数格式:%u",-65)) -- -65 -->4294967231 ?? print(string.format("接受一个数字并将其转化为十六进制数格式(小写字母):%x",62)) -- 62 --> 3e print(string.format("接受一个数字并将其转化为十六进制数格式(小写字母):%X",62)) -- 62 --> 3E print(string.format("接受一个数字并将其转化为科学记数法格式(小写字母e:%e",65)) -- 65 --> 6.500000e+001 print(string.format("接受一个数字并将其转化为科学记数法格式(大写字母E:%E",65)) -- 65 --> 6.500000E+001 print(string.format("接受一个数字并将其转化为浮点数格式:%.1f",65)) -- 65 --> 65.0 (.1 表示保留一位小数) str1 = "abcde" print(str1) -- abcde print(string.format("接受一个字符串并将其转化为可安全被Lua编译器读入的格式:%q",str1)) -- "abcde" str2 = "hello" print(string.format("接受一个字符串并按照给定的参数格式化该字符串:%.3s",str2)) -- .3 表示截取str2前3位 print(string.format("接受一个字符串并按照给定的参数格式化该字符串:%10s",str2)) -- 表示str2不足10位时,在左边补空格 print(string.format("接受一个字符串并按照给定的参数格式化该字符串:%010s",str2))-- 表示str2不足10位时,在左边补0 print(string.format("%-10s接受一个字符串并按照给定的参数格式化该字符串",str2)) -- 表示str2不足10位时,在右边补空格
- string.char(arg) 将整数转为字符并连接
print(string.char(66,68,70,72))
- string.byte(arg,[int]) 将指定下标位置的字符转成数字
print(string.byte("BDF")) --66:默认返回第一个字符对应的数字 print(string.byte("BDF",2)) --68:转换下标为2所对应的字符B为数字 print(string.byte("Lua",-1)) -- 转换末尾第一个字符 print(string.byte("Lua",-2)) -- 转换末尾第二个字符
- string.len(arg) 计算指定字符串的长度
print(string.len("hello"))
- string.rep(str,n) 返回字符串的n个复制
print(string.rep("hello",3)) --hellohellohello
- string.gmatch(str,pattern) 返回str中匹配pattern的字符串列表
for v in string.gmatch("hello lua world","%a+") do print(v) end
- string.match(str,pattern,init) 只寻找源字符串中第一个配对,参数init可选,指定搜寻过程的起点,默认是1,没有匹配的返回nil
- 匹配模式:可以匹配字符串,也可以匹配字符类(string.find , string.gmatch , string.gsub , string.match )
- .(点):与任何字符配对
- %a:与任何字母配对
- %c:与任何控制符配对(例如\n)
- %d:与任何数字配对
- %l:与任何小写字母配对
- %p:与任何标点配对
- %s:与空白字符配对
- %u:与任何大写字母配对
- %w:与任何字母数字配对
- %x:与任何十六进制数配对
- %z:与任何代表0的字符配对
- []:与多个字符类配对,例如[%d%a_]:与任何数字、字母、下划线配对
- [^]:与多个字符类配对取反,例如[^%s]:与任何非空白字符配对
- 当上述的字符类用大写书写时,表示与非此类的任何字符配对,例如:%D:与任何非数字配对
- 特殊字符:( ) . % + - * ? [ ^ $ ] 若要配对特殊字符,则需要用%来转义,例如:%. 配对 . %% 配对 % (%还可以转义所有非字母的字符)
- 模式条目:指一个模式条目的序列。 在模式最前面加上符号 '^' 将锚定从字符串的开始处做匹配。 在模式最后面加上符号 '$' 将使匹配过程锚定到字符串的结尾。 如果 '^' 和 '$' 出现在其它位置,它们均没有特殊含义,只表示自身
- 单个字符类匹配该类别中的任意单个字符
- 单个字符类跟一个*,将匹配0或多个该类的字符
- 单个字符类跟一个+,将匹配1或多个该类的字符
- 单个字符类跟一个?,将匹配0或1个该类的字符
- 捕获:模式可以在内部用小括号括起一个子模式; 这些子模式被称为 捕获物。 当匹配成功时,由 捕获物 匹配到的字符串中的子串被保存起来用于未来的用途。 捕获物以它们左括号的次序来编号。 例如,对于模式 "(a*(.)%w(%s*))" , 字符串中匹配到 "a*(.)%w(%s*)" 的部分保存在第一个捕获物中 (因此是编号 1 ); 由 "." 匹配到的字符是 2 号捕获物, 匹配到 "%s*" 的那部分是 3 号。
print(string.gsub("hello, www.xxx.com","%A","*")) --将所有非字母的字符替换成*:hello**www*xxx*com 4 print(string.gsub("hello, www.xxx.com","%.","*")) --.是特殊字符,要用%来转义:hello, www*xxx*com 2 print(string.gsub("I have %100 money","%%","$")) --I have $100 money 1 --string.match(str,pattern) 只寻找源字符串中第一个匹配字符串 str = "abc123def45" patt1 = "[0-9]" patt2 = "[0-9]+" patt3 = "^[0-9]+" patt4 = "[0-9]+$" patt5 = "[2|3]+" print(string.match(str,patt1)) --1 print(string.match(str,patt2)) --123 print(string.match(str,patt3)) --nil :^放在起始位置表示必须以^后面的字符类开始(此例子表示要以数字开始) print(string.match(str,patt4)) --45 :$放在结束位置表示必须以$前面的字符类结束(此例子表示要以数字结束) print(string.match(str,patt5)) --23