设为首页 加入收藏

TOP

Lua正则表达式(string函数)
2015-07-16 12:57:26 来源: 作者: 【 】 浏览:6
Tags:Lua 正则 表达式 string 函数

下面的表列出了Lua支持的所有字符类:
? .? ? ? ? ? 任意字符
%a? ? ? ? 字母
%c? ? ? ? 控制字符
%d? ? ? ? 数字
%l? ? ? ? ? 小写字母
%p? ? ? ? 标点字符
%s? ? ? ? 空白符
%u? ? ? ? 大写字母
%w? ? ? ? 字母和数字
%x? ? ? ? 十六进制数字


%z? ? ? ? 代表0的字符


在模式匹配中有一些特殊字符


( ) . % + - * ? [ ^ $



%用作特殊字符的转义字符,因此 '%.' 匹配字符点'.', '%%'匹配字符 '%' .


转义字符'%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。


+? ? ? ? ? 匹配前一字符1次或多次
*? ? ? ? ? 匹配前一字符0次或多次
-? ? ? ? ? 匹配前一字符0次或多次
?? ? ? ? ? 匹配前一字符0次或1次



举例:


(1)把字符串中的非字母替换成数字'.'


print(string.gsub("Hello, up-down!", "%A", "."))
? ? --> hello..up.down.? ? 4


(数字4不是字符串结果的一部分,他是gsub返回的第二个结果,代表发生替换的次数。其他的关于打印gsub结果的例子中将会忽略这个数值)


(2)'%d+'匹配一个或多个数字 (整数):


i, j = string.find("the number 1298 is even", "%d+")
? ? --> print(i,j) --> 12? 15


(3)匹配日期格式


s = "Today is 30/05/1999, firm"


print(string.sub(s, string.find(s, ""%d%d/%d%d/%d%d%d%d"")) --> 30/05/1999


(4)截取想要的文件名(文件名的中间部分可能是jpg|png|jpeg|gif)


local str1 = "wKgAgk1_M36eGCazAAHAC_MLulA790.jpg_200x200_2.jpg"
local str2 = "wKgAgk1_M36eGCazAAHAC_MLulA790.png_200x200_2.jpg"


_,index1 = string.find(str1,"%.%a%a%a_")
_,index2 = string.find(str2,"%.%a%a%a_")
print(string.sub(str1,1,index1-1))?


-->? wKgAgk1_M36eGCazAAHAC_MLulA790.jpg(匹配的是.jpg_或.png_)
print(string.sub(str2,1,index2-1))?


-->? wKgAgk1_M36eGCazAAHAC_MLulA790.png(匹配的是.jpg_或.png_)
print(string.gsub(str2,"_%d+x%d+_%d%.%a+",""))


?-->? wKgAgk1_M36eGCazAAHAC_MLulA790.png(匹配的是_200x200_2.jpg)


其他扩展:


print("=================== "..os.date().." =======================")



--查看CPU耗时:


local x3 = os.clock()
local s = 0
for i = 1, 100000 do
path,_ = string.gsub(str2,"_%d+x%d+_%d%.%a+","")
end
local x4 = os.clock()
print(string.format("耗时: %.2f\n", x4 - x3))


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python入门案例之Hello World! 下一篇Hibernate4之Hello World(基础环..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: