【Lua基础系列】之模式匹配
大家好,我是Lampard~~
欢迎来到Lua基础系列的博客
PS:本博客知识参考资料为:《Lua程序设计第四版》,该书由Lua的创始人2018年所编著,所以大家可以放心去吸收知识
前文再续,书接上一回。
今天讲的是lua中模式匹配的问题,由于lua中没有正则表达式,那么它是如何实现模式匹配的呢。
模式匹配相关的函数:
string.find(),string.gsub(),string.match(),string.gmatch()
下面我们一个一个往下看:
(一)string.find()
string.find(原字符串,目标字符串)里面填入两个参数,
作用是从目源字符串中找到目标字符串的起始和终止索引,我们可以看看下面这个例子:
string.find()这个函数,能够找到目标字符串的起始位置和初始位置,但是只能返回第一个出现的目标字符串,若找不到目标
字符串则返回nil值。
(二)string.match()
string.match()也同样在一个字符串中搜索模式,但是与string.find()不同的是,match返回的是字串本身。
-- 比如说我们这样做
s = “hello world”
s1 = string.match(s,"hello")
-- 那么此时s1就等于hello
是不是有人已经跟我一样准备吐槽了:这特码有啥用???
别急,match的强大之处是在于可以通过字符分类找到想找的答案,比如这样:
至于%d是个什么东西,我们往下继续说
(三)string.gsub()
string.gsub()这个函数我们之前接触过,它的作用是从原字符串中寻找目标字符串,然后将之改成想要的字符串。
语法:string.gsub(原字符串,目的字符串,更改后的字符串,更改的次数)
其中参数四的作用是目的字符串要被更改的次数,比较少用,不使用时默认全部都要更改
(四)string.gmatch()
string.gmatch()语法和string.match()一样,但是返回的是一个函数
我们在使用string.match()和string.find()的时候,找到的都是第一个出现的字符串,
但是加入我想把所有目的字符串都找出来呢?string.gmatch()就可以帮我们解决这个问题了
其中%a是找到英文字符,%a+是找到所有连着的字符,%d我们上文的意义是找数字,%d+是找连着的数字
那么究竟还有哪一些规格呢?本书给了如下的表格:
. --任意字符
%a --字母
%c --控制字符
%d --数字
%l --小写字母
%g --除空格外的字符
%p --标点符号
%u --大写字符
%w --字母和数字
%x --十六进制数字