LUA string库详解

合集下载

lua string

lua string

lua string.match的用法Lua 中的 string.match 函数用于在字符串中查找与给定模式匹配的子串,并返回匹配的结果。

它的语法格式如下:string.match(s, pattern, init)其中:- s:要搜索的字符串。

- pattern:模式字符串,可以包含特殊字符,如 %a 数字和字母的字符,%c 控制字符,%d 数字,%l 小写字母,%p 标点字符,%s 空白字符,%u 大写字母,%w 字母和数字,%x 十六进制数字,%% 百分号本身。

也可以使用方括号表示字符集合,例如 [%w_] 表示字母、数字和下划线。

- init:起始搜索位置,可选择性地指定,默认为 1。

string.match 函数返回匹配到的第一个子串,如果没有匹配到则返回 nil。

下面是一个例子:```lualocal str = "Hello, Lua!"-- 查找字符串中的第一个单词local word = string.match(str, "%w+")print(word) -- 输出 "Hello"-- 查找字符串中以逗号后面的第一个单词word = string.match(str, ",%s*(%w+)")print(word) -- 输出 "Lua"```在这个例子中,第一个 match 函数的模式 "%w+" 表示匹配一个或多个字母、数字的字符,所以返回了字符串中的第一个单词 "Hello"。

第二个 match 函数的模式 ",%s*(%w+)" 表示以逗号开头,可能有零个或多个空格,后面跟着一个或多个字母、数字的字符。

括号 () 表示将这部分子串作为一个返回结果,所以返回了字符串中逗号后面的第一个单词 "Lua"。

LUAstring库详解

LUAstring库详解

LUAstring库详解1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...2. string库中所有的function都不会直接操作字符串,⽽是返回⼀个结果s = "[abc]"string.len(s) <==返回5string.rep("abc", 2) <==返回"abcabc"string.lower("ABC") <==返回"abc"string.upper("abc") <==返回"ABC"string.sub(s, 2) <==返回"abc]"string.sub(s, -2) <==返回"c]"string.sub(s, 2, -2) <==返回"abc"string.format(fmt, ...)返回⼀个类似printf的格式化字符串string.find(s, pattern, pos)第1个参数:源字符串第2个参数:待搜索之模式串第3个参数:A hint, 从pos位置开始搜索找到匹配返回:匹配串开始和结束的位置,否则返回nil简单的模式串s = "hello world"i, j = string.find(s, "hello")print(i, j) --> 1 5print(string.sub(s, i, j)) --> helloprint(string.find(s, "world")) --> 7 11i, j = string.find(s, "l")print(i, j) --> 3 3print(string.find(s, "lll")) --> nil格式化的模式串s = "Deadline is 30/05/1999, firm"date = "%d%d/%d%d/%d%d%d%d"print(string.sub(s, string.find(s, date))) --> 30/05/1999下⾯的表列出了Lua⽀持的所有字符类:. 任意字符%s 空⽩符%p 标点字符%c 控制字符%d 数字%x ⼗六进制数字%z 代表0的字符%a 字母%l ⼩写字母%u ⼤写字母%w 字母和数字上⾯字符类的⼤写形式表⽰⼩写所代表的集合的补集。

lua string.gmatch用法

lua string.gmatch用法

lua string.gmatch用法在Lua 中,string.gmatch 是一个函数,用于在字符串中迭代匹配指定的模式。

它返回一个迭代器函数,该函数会根据给定的模式对字符串进行匹配,并在每次迭代时返回匹配的结果。

以下是string.gmatch 的语法:lua复制代码:for iter, match in string.gmatch(string, pattern) do-- 迭代处理end参数说明:• string:要搜索的字符串。

• pattern:要匹配的模式,可以使用通配符或指定匹配规则。

在每次迭代中,iter 是一个临时的字符串,表示当前匹配的子串的索引位置,而match 是完整的匹配结果。

如果没有更多的匹配项,迭代将停止。

下面是一个简单的示例,演示如何使用string.gmatch 来提取字符串中的数字:lua复制代码:local str = "There are 10 types of people in this world:those who understand binary, and those who don't."local pattern = "%d+" -- 匹配一个或多个数字for iter, match in string.gmatch(str, pattern) doprint(match) -- 输出匹配到的数字end输出:复制代码:10在上面的示例中,我们使用%d+ 作为模式,匹配一个或多个数字。

通过使用string.gmatch,我们可以迭代提取字符串中的所有数字,并将它们打印出来。

Lua字符串库中的几个重点函数介绍

Lua字符串库中的几个重点函数介绍

Lua字符串库中的⼏个重点函数介绍在《》中也说到了,要对string库的模式匹配进⾏单独的讲解。

对于字符串的处理,对于任何语⾔的学习来说,都是⼀个难点,⽽且也是⼀个必会的知识点。

给你⼀个字符串,让你按照某种需求进⾏处理,你不会,那是多么尴尬的⼀件事情。

所以,看完《》和这篇⽂章之后,我争取做到让你在处理字符串时,不再感到捉襟见肘,不再尴尬。

说到Lua中的模式匹配,基本上就是围绕着以下⼏个函数展开的:1.find;2.match;3.gsub;4.gmatch。

我的总结也就是围绕着上⾯的四个函数展开的。

请容我慢慢道来。

简单实⽤的findstring.find()函数⽤于在⼀个给定的⽬标字符串中搜索⼀个模式。

最简单的模式就是⼀个单词,它只会匹配与⾃⼰完全相同的拷贝。

当find找到⼀个模式后,它会返回两个值:匹配到的起始索引和结尾索引;如果没有找到任何匹配,它就返回nil。

⽰例代码:复制代码代码如下:local str = "Hello World"local i, j = string.find(str, "Hello") -- 返回Hello在str中的起始位置和终⽌位置print(i, j)string.find函数还具有⼀个可选的第三个参数,它是⼀个索引,告诉函数应该从⽬标字符串的哪个位置开始搜索。

当我们处理⼀个字符串中与给定模式相匹配的所以内容时,这个设置是⾮常有⽤的。

我们可以循环的进⾏查找操作。

当然了,这⾥只是说了最普通,也是最简单的⼀种⽅式,对于第⼆个参数,我们完全可以传递⼀个正则表达式,也就是⼀个pattern,进⾏正则匹配。

⽰例代码:复制代码代码如下:local str = "Hello12345World"local i, j = string.find(str, "%d+")print(i, j) -- 6 10find的兄弟match函数string.match与string.find⾮常相似,它也是⽤于在⼀个字符串中搜索⼀种模式。

Lua教程(十四):字符串库详解

Lua教程(十四):字符串库详解

Lua教程(⼗四):字符串库详解1. 基础字符串函数:字符串库中有⼀些函数⾮常简单,如:1). string.len(s) 返回字符串s的长度;2). string.rep(s,n) 返回字符串s重复n次的结果;3). string.lower(s) 返回s的副本,其中所有的⼤写都被转换为了⼩写形式,其他字符不变;4). string.upper(s) 和lower相反,将⼩写转换为⼤写;5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符。

Lua中,第⼀个字符的索引值为1,最后⼀个为-1,以此类推,如: print(string.sub("[hello world]",2,-2)) --输出hello world6). string.format(s,...) 返回格式化后的字符串,其格式化规则等同于C语⾔中printf函数,如:print(string.format("pi = %.4f",math.pi)) --输出pi = 3.14167). string.char(...) 参数为0到多个整数,并将每个整数转换为对应的字符。

然后返回⼀个由这些字符连接⽽成的字符串,如:print(string.char(97,98,99)) --输出abc8). string.byte(s,i) 返回字符串s的第i个字符的Ascii值,如果没有第⼆个参数,缺省返回第⼀个字符的Ascii值。

复制代码代码如下:print(string.byte("abc")) --输出97print(string.byte("abc",-1)) --输出99由于字符串类型的变量都是不可变类型的变量,因此在所有和string相关的函数中,都⽆法改变参数中的字符串值,⽽是⽣成⼀个新值返回。

2. 模式匹配函数:Lua的字符串库提供了⼀组强⼤的模式匹配函数,如find、match、gsub和gmatch。

Lua中的string库(字符串函数库)总结

Lua中的string库(字符串函数库)总结

Lua中的string库(字符串函数库)总结Lua解释器对字符串的⽀持很有限。

⼀个程序可以创建字符串并连接字符串,但不能截取⼦串,检查字符串的⼤⼩,检测字符串的内容。

在Lua中操纵字符串的功能基本来⾃于string库。

字符串库中的⼀些函数是⾮常简单的:string.len(s) 返回字符串s的长度;string.rep(s, n) 返回重复n次字符串s的串;你使⽤string.rep("a", 2^20)可以创建⼀个1M bytes的字符串(⽐如,为了测试需要);string.lower(s) 将s中的⼤写字母转换成⼩写(string.upper将⼩写转换成⼤写)。

如果你想不关⼼⼤⼩写对⼀个数组进⾏排序的话,你可以这样:复制代码代码如下:table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)string.upper(s) 将s中的⼩写字母转换成⼤写string.upper和string.lower都依赖于本地环境变量。

所以,如果你在 European Latin-1环境下,表达式:复制代码代码如下:string.upper("a??o") --> "A??O"string.sub(s,i,j) 函数截取字符串s的从第i个字符到第j个字符之间的串。

Lua中,字符串的第⼀个字符索引从1开始。

你也可以使⽤负索引,负索引从字符串的结尾向前计数:-1指向最后⼀个字符,-2指向倒数第⼆个,以此类推。

所以, string.sub(s, 1, j)返回字符串s的长度为j的前缀;string.sub(s, j, -1)返回从第j个字符开始的后缀。

如果不提供第3个参数,默认为-1,因此我们将最后⼀个调⽤写为string.sub(s, j);string.sub(s, 2, -2)返回去除第⼀个和最后⼀个字符后的⼦串。

lua函数参数的类型

lua函数参数的类型

lua函数参数的类型Lua函数参数的类型在Lua编程语言中,函数是非常重要的一部分,它们用于执行特定的任务和操作。

在Lua中,函数参数的类型对于函数的正确使用和理解至关重要。

本文将介绍Lua函数参数的各种类型,以及它们在函数中的使用方式。

1. 字符串类型(String)字符串类型是Lua中最常用的函数参数类型之一。

字符串是由一系列字符组成的,可以包含字母、数字、符号和其他特殊字符。

在函数中,字符串参数可以用来表示一些具体的值或信息。

例如,一个打印函数可以接受一个字符串参数,然后将其输出到控制台上。

2. 数字类型(Number)数字类型是Lua中另一个常见的函数参数类型。

数字可以是整数或浮点数,用于表示数值或计算结果。

在函数中,数字参数可以用于执行算术运算或比较操作。

例如,一个计算平均值的函数可以接受多个数字参数,然后返回它们的平均值。

3. 布尔类型(Boolean)布尔类型是Lua中用于表示真假值的函数参数类型。

布尔类型只有两个可能的值:true和false。

在函数中,布尔参数可以用于控制程序的流程和执行特定的操作。

例如,一个判断奇偶数的函数可以接受一个布尔参数,然后根据参数的值返回相应的结果。

4. 表类型(Table)表类型是Lua中一种复杂的函数参数类型。

表是一种集合,可以存储多个键值对。

在函数中,表参数可以用于存储和访问各种数据。

例如,一个统计成绩的函数可以接受一个表参数,然后根据表中的数据计算总分和平均分。

5. 函数类型(Function)函数类型是Lua中非常特殊的一种函数参数类型。

函数可以作为参数传递给其他函数,也可以作为返回值返回给调用者。

在函数中,函数参数可以用于执行特定的操作或回调函数。

例如,一个排序函数可以接受一个函数参数,然后根据函数的比较结果对数据进行排序。

6. 线程类型(Thread)线程类型是Lua中用于实现并发编程的一种函数参数类型。

线程是可以独立执行的代码块,可以与其他线程并发执行。

lua各种库

lua各种库

1.math 库函数名描述示例结果pi 圆周率math.pi 3.1415926535898abs 取绝对值math.abs(-2012) 2012ceil 向上取整math.ceil(9.1) 10floor 向下取整math.floor(9.9) 9max 取参数最大值math.max(2,4,6,8) 8min 取参数最小值math.min(2,4,6,8) 2pow 计算x的y次幂math.pow(2,16) 65536sqrt 开平方math.sqrt(65536) 256mod 取模math.mod(65535,2) 1modf 取整数和小数部分math.modf(20.12) 20 0.12randomseed 设随机数种子math.randomseed(os.time())random 取随机数math.random(5,90) 5~90rad 角度转弧度math.rad(180) 3.1415926535898deg 弧度转角度math.deg(math.pi) 180exp e的x次方math.exp(4) 54.598150033144log 计算x的自然对数math.log(54.598150033144) 4log10 计算10为底,x的对数math.log10(1000) 3frexp 将参数拆成x * (2 ^ y)的形式math.frexp(160) 0.625 8ldexp 计算x * (2 ^ y) math.ldexp(0.625,8) 160sin 正弦math.sin(math.rad(30)) 0.5cos 余弦math.cos(math.rad(60)) 0.5tan 正切math.tan(math.rad(45)) 1asin 反正弦math.deg(math.asin(0.5)) 30acos 反余弦math.deg(math.acos(0.5)) 60atan 正切math.deg(math.atan(1)) 452、lua table库table.concat(table, sep, start, end)concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/bidepan2023/blog/item/5f49bda4468e91f09052eedc.ht ml
LUA string库详解
2009-01-09 18:33
string.byte (s [, i])
Returns the internal numerical code of the i-th character of s, or nil if the index is out of range. If i is absent, then it is assumed to be 1.
i may be negative.
Note that numerical codes are not necessarily portable across platforms.
string.char (i1, i2, ...)
Receives 0 or more integers. Returns a string with length equal to the number of arguments, in which each character has the internal numerical code equal to its correspondent argument.
Note that numerical codes are not necessarily portable across platforms.
1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...
2. string库中所有的function都不会直接操作字符串,而是返回一个结果
s = "[abc]"
string.len(s) <==返回5
string.rep("abc", 2) <==返回"abcabc"
string.lower("ABC") <==返回"abc"
string.upper("abc") <==返回"ABC"
string.sub(s, 2) <==返回"abc]"
string.sub(s, -2) <==返回"c]"
string.sub(s, 2, -2) <==返回"abc"
string.format(fmt, ...)返回一个类似printf的格式化字符串
string.find(s, pattern, pos)
第1个参数:源字符串
第2个参数:待搜索之模式串
第3个参数:A hint, 从pos位置开始搜索
找到匹配返回:匹配串开始和结束的位置,否则返回nil
简单的模式串
s = "hello world"
i, j = string.find(s, "hello")
print(i, j) --> 1 5
print(string.sub(s, i, j)) --> hello
print(string.find(s, "world")) --> 7 11
i, j = string.find(s, "l")
print(i, j) --> 3 3
print(string.find(s, "lll")) --> nil
格式化的模式串
s = "Deadline is 30/05/1999, firm"
date = "%d%d/%d%d/%d%d%d%d"
print(string.sub(s, string.find(s, date))) --> 30/05/1999
下面的表列出了Lua支持的所有字符类:
. 任意字符
%s 空白符
%p 标点字符
%c 控制字符
%d 数字
%x 十六进制数字
%z 代表0的字符
%a 字母
%l 小写字母
%u 大写字母
%w 字母和数字
上面字符类的大写形式表示小写所代表的集合的补集。

例如,'%A'非字母的字符:
模式串中的特殊字符
( ) . % + - * ? [ ^ $
'%' 用作特殊字符的转义字符
'%.' 匹配点;
'%%' 匹配字符 '%'。

转义字符 '%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。

当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。

用'[]'创建字符集
'[%w_]' 匹配字母数字和下划线
'[01]' 匹配二进制数字
'[%[%]]'匹配一对方括号
在'[]'中使用连字符'-'
'%d' 表示 '[0-9]';
'%x' 表示 '[0-9a-fA-F]'
'[0-7]' 表示 '[01234567]'
在'[]'开始处使用 '^' 表示其补集:
'[^0-7]' 匹配任何不是八进制数字的字符;
'[^\n]' 匹配任何非换行符户的字符。

'[^%s]' == '%S'
模式修饰符
+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次;最长匹配
- 匹配前一字符0次或多次;最短匹配
? 匹配前一字符0次或1次
^ 匹配字符串开头
$ 匹配字符串结尾
捕获:用()将要捕获的部分包围起来
pair = "name = Anna"
firstidx, lastidx, key, value = string.find(pair, "(%a+)%s*=%s*(%a+)")
print(key, value) <== name Anna
拷贝捕获(%1-%9)
s = "abc \"it\'s a cat\""
_,_,_,q = string.find(s, "([\"'])(.-)%1"))
print(q) <== it's a cat 如果%d代表第几个捕获的拷贝。

string.gsub(s, pattern, reps)
第1个参数:源字符串
第2个参数:待替换之模式串
第3个参数:替换为reps
将s中所有符合pattern的字串替换为reps,返回结果串+匹配数
print(string.gsub("hello, world", "o", "a")) <== hella, warld 2
gsub也可以用拷贝捕获技巧
print(string.gsub("hello, world", "(o)", "%1-%1")) <== hello-o, wo-orld 2
print(string.gsub("hello Lua", "(.)(.)", "%2%1")) <== ehll ouLa 4
function trim (s) return (string.gsub(s, "^%s*(.-)%s*$", "%1")) end <== 注意匹配数用括号丢弃
string.gsub(s, pattern, func)
第3个参数:自定义函数,对找到的匹配操作,并传出替换值
s, n = string.gsub("hello world", "l+", function(s) return "xxx" end)
print(s, n) <== hexxxo worxxxd 2
string.gfind(s, pattern)
返回一个迭代器,迭代器每执行一次,返回下一个匹配串;iter = string.gfind("a=b c=d", "[^%s+]=[^%s+]")
print(iter()) <== a=b
print(iter()) <== c=d
通常用于泛性for循环,下面的例子结果同上
for s in string.gfind("a=b c=d", "[^%s+]=[^%s+]") do print(s)
end。

相关文档
最新文档