好了我们继续上篇的内容进行说明(http://blog.csdn.net/xueyunf/article/details/7857509),如果对lua中string用法有些了解就不用看第一篇了,今天想说的只是gsub这个函数的第四个参数可选参数的用法,当然一样先来看下代码:
s = string.gsub("all lii", "l", "x", 1)
print(s)
为了方便大家的查看,所以决定以后代码均加上背景色,呵呵,好了让我们看下运行结果吧:
然后我来解释下前面的参数就不说了,第四个参数代表要替换多少个这样的内容,然后我们将代码的最后一个参数改为2,然后再查看下结果:
这里只是进行下简单的示范,具体情况可能会遇到更加复杂情况,相信到这里你就可以理解lua中string.gsub这个函数的用法了。
str = "xx xx xx ll dd bb cc sdf fdfes fs"
_, count = string.gsub(str, " ", " ")
print(count)
这个函数就不多解释了,把原来的空格依旧替换为空格,貌似没改变字符串的任何东西,这是用来做什么呢?还记得上次说明的这个函数返回2个值,其中第二个值是返回替换个数的,这就可以判定有多少个这样的字符,对应上面具体的代码就是统计有多少个空格,还是贴出结果来吧:
呵呵我的lua讲解比较适合那些不想去太多思考的家伙,只要看着具体去慢慢理解就好了。
str = "xx xx xx ll dd bb cc sdf fdfes fs"
local first=string.sub(str,string.find(str,"%a+"))
print(first);
同样先看运行结果:
这里其实只是个函数的嵌套使用,我们将string.find函数的返回值作为了string.sub的参数传入了该函数,具体会用这两个函数就可以随心所欲的驾驭这种嵌套。好了这就不废话了,我们继续下一个吧:
s = [[then he said:"it's all right"!]]
print(s);
a,b,quotedPart = string.find(s,'(["].*["])')
print(a)
print(b)print(quotedPart);
local quotedPart1 = string.sub(quotedPart,2,b-a);
print(quotedPart1);
先看显示结果:
首先我们将字符串s打印出来,然后我们对其进行了匹配操作我们匹配引号里面的内容这个恐怕是好多程序员最想知道的内容,因为在一个句子中有引号往往是比较难处理的。因为引号被本身作为这个参数的开始结束的标志,所以我们要进行特殊的处理就是用[]这两个符号包住。也许有人想用%"这样去处理,当然这样也可以。第二个string.sub这个函数就不解释了,只是为了将引号去掉。
然后我们就看看一些复杂的匹配用法吧,这里不可能将所有的匹配情况都实现一次,只举几个简单的例子,
print(string.gsub("hello Lua!", "(%a+)%s(%a+)", "%2-%1"))
print(string.gsub("hello Lua", "(.)(.)(.)", "%3%2%1"))
同样来看下最后输出,具体的情况留给你们具体理解吧,不理解的可以留言提问。:
最后在贴出几个例子:
numbertest = "01001220039";
--判断一个字符是否是整数
a,b=string.find(numbertest, "^[+-]?%d+$");if(((a~=nil) and (b~=nil)))
then print("numbertest is a number");
end
--目前去掉a~n中间的部分
print(string.gsub("a (enclosed (in) parentheses) line","%ban", ""))
输出结果:
好了大概我觉得常用的用法就这么多了,要是还有问题,欢迎大家一起讨论解决!最后方便大家查阅一些额常用的匹配,以及全部的string的测试代码如下:
--. 任意字符
--
--%a 字母
--
--%c 控制字符
--
--%d 数字
--
--%l 小写字母
--
--%p 标点字符
--
--%s 空白符
--
--%u 大写字母
--
--%w 字母和数字
--
--%x 十六进制数字
--
--%z 代表0的字符
--上面字符类的大写形式表示小写所代表的集合的补集。例如,'%A'非字母的字符:
--下面的用法是将非字母字符用·代替
--[[
以 '^' 开头的模式只匹配目标串的开始部分,相似的,
以 '$' 结尾的模式只匹配目标串的结尾部分。
]]
ss = string.upper("ss")
print(ss)
ab,c=string.gsub("hEllo, up-down!", "(%a)",function(s) return string.upper(s) end)
print(ab,c)
s = "hello world"
i,j= string.find(s," ")
--
print(i,j)
--
print(string.sub(s,1,i)) --> hello
s,t = string.gsub("Lua is cute", "cute", "great")
print(s,t) --> Lua is great
s = string.gsub("all lii", "l", "x")
print(s) --> axx xii
s = string.gsub("Lua is great", "perl", "tcl")
print(s) --> Lua is great
--第四个参数是可选的,用来限制替换的范围:
s = string.gsub("all lii", "l", "x", 1)
print(s) --> axl lii
s = string.gsub("all lii", "l", "x", 2)
print(s) --> axx lii
str = "xx xx xx ll dd bb cc sdf fdfes fs"
_, count = string.gsub(str, " ", " ")
print(count)
local first=string.sub(str,string.find(str,"%a+"))
print(first);
s = [[then he said:"it's all right"!]]
print(s);
--a,b,quotedPart = string.find(s,'(["].*["])')
a,b,quotedPart = string.find(s,'(%".*%")')
print(a)
print(b)
print(quotedPart);
local quotedPart1 = string.sub(quotedPart,2,b-a);
print(quotedPart1);
print(string.gsub("hello Lua!", "(%a+)%s(%a+)", "%2-%1"))
print(string.gsub("hello Lua", "(.)(.)(.)", "%3%2%1"))
numbertest = "01001220039";
--判断一个字符是否是整数
a,b=string.find(numbertest, "^[+-]?%d+$");
if(((a~=nil) and (b~=nil)))
then print("numbertest is a number");
end
--目前去掉a~n中间的部分
print(string.gsub("a (enclosed (in) parentheses) line","%ban", ""))