Lua程序设计(十三)

模式匹配

Lua语言因为大小的原因并没有使用POSIX正则表达式,或者Perl正则表达式来进行模式匹配。

模式匹配相关函数

字符串标准库提供了基于模式的4个函数。find, gsub, match and gmatch

string.find

string.find用于在指定的目标字符串中搜索指定的模式。该函数会返回两个值:匹配到模式开始位置的索引和结束位置的索引。如果没有任何找到任何匹配,则返回nil

s = "hello world"
i, j = string.find(s, "hello") --->1 5

string.find还具有两个可选的参数。第三个参数是一个索引,用于说明字符串的开始寻找位置。第四个参数为一个布尔值,用于说明是否简单搜索。简单搜索即在目标字符串中寻找子字符串的搜索方式。

string.find("a [word]", "[", 1, true) -- > 3 3

string.match

 string.match与string.find很相似,该函数返回的是目标字符串中与模式相匹配的那部分子串,并不像find函数那样返回索引。当模式是变量时,这个函数就会体现出作用。

data = "Today is 17/7/1990"
d = string.match(date, "%d+/%d+/%d+")
print(d) --> 17/7/1990

string.gsub

string.gsub有三个必选参数:目标字符串,模式和替换字符串,该函数可以将目标字符串中的所有出现模式的地方替换成字符串。

s = string.gsub("Lua is cute", "cute", "great")
print(s) --> Lua is great
s = string.gsub("all lli", "l", "x")
print(s) --> axx xii

除了替换字符串以外,string.gsub的第三个参数可以是一个函数或表,这个函数或表会被调用以产生字符串替换。

string.gsub还会返回替换的次数。

string.gmatch

函数string.gmatch返回一个函数,通过返回的函数可以遍历一个字符串中所有出现的指定模式

s = "some string"
words = {}
for w in string.gmatch(s, "%a+") do
    words[#words+1] = w
end

以上代码可以找出指定字符串s出现的所有单词并将其存入words表中

“%a+”会匹配一个或多个字母组成的序列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值