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))

时间: 2024-08-26 23:37:33

Lua正则表达式(string函数)的相关文章

lua的string库与强大的模式匹配

lua原生解释器对字符串的处理能力是十分有限的,强大的字符串操作能力来自于string库.lua的string函数导出在string module中.在lua5.1,同时也作为string类型的成员方法,因此,我们既可以写成string.upper(s), 也可以s:upper(),选择你喜欢的写法. string.len(s)返回s的长度. string.rep(s, n)返回重复s字符串n次的字符串. string.lower(s)返回一份已将大写转成小写的字符串s的拷贝 lower,upp

在lua的string库和正则表达式

一.前提要了解一下lua 的string几个方法 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串,而是返回一个结果 string.len(s):返回字符串的长度. string.lower(s):变小写. string.upper(s):变大写. string.rep(s,n):将s拷贝n份,并连接起来,返回. string.sub(s,i [,j]):取s中从i开始到j为止的自字符串.

Python中re(正则表达式)模块函数学习

今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. 方法/属性 作用 match() 决定 RE 是否在字符串刚开始的位置匹配 search() 扫描字符串,找到这个 RE 匹配的位置 findall() 找到 RE 匹配的所有子串,并把它们作为一个列表返回 finditer() 找到 RE 匹配的所有子串,并把它们作为一个迭代器返回 match() 函数只检查 RE 是否在字符串开始处匹配

Lua的string和string库总结

Lua有7种数据类型,分别是nil.boolean.number.string.table.function.userdata.这里我总结一下Lua的string类型和string库,复习一下,以便加深记忆. 个人认为string是Lua编程使用数据结构的时候,重要性仅次于table的类型.十分重要! 一.string基础. Lua并没有字符类型,Lua的string类型表示字符序列.所以,长度为1的string就表示了单个字符.Lua的字符类型有这些特征: 1.string字符序列中的字符采用

Lua学习(4)——函数

在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量或table的构造器,那么圆括号可以省略,如print "Hello World"和f {x = 20, y = 20}.    Lua为面对对象式的调用也提供了一种特殊的语法--冒号操作符.表达式o.foo(o,x)的另一种写法是o:foo(x).冒号操作符使调用o.foo时将o隐含的作

PHP中有关正则表达式的函数集锦

之前学正则表达式的目的是想从网上抓取点小说啊,文档啊,还有获取相应的视频连接然后批量下载.当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有提到),之前根本就不知道有这东西,所以就自己废着劲去学习正则表达式,然后再学习PHP中正则表达式的函数是如何使用的,然后再分析自己要抓取的DOM,最后写自己的正则表达式,正则表达式,写着还可以,不过自己刚写完的正则表达式就可能看不出他是什么意思. 有种调侃正则表达式式的说法,把正则表达式叫做火星文.

PHP 正则表达式常用函数使用小结

在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数.另一套是由POSIX(Portable Operation System interface)扩展库提供的.POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数. 两套函数库的功能相似,执行效率稍有不同.一般而言,实

正则表达式split()函数

正则表达式split()函数:此函数可以用指定正则表达式匹配的字符来分割字符串生成一个数组.返回值是一个数组.这里只介绍正则表达式的相关操作,其他普通字符的分割操作可以参阅javascript的String对象的split()方法一章节.语法结构: stringObject.split(Reg,howmany) 参数列表如下: regexp 必需.RegExp对象. howmany 可选.该参数可指定返回的数组的最大长度. 如果设置了该参数,返回的子串不会多于这个参数指定的数组.如果没有设置该参

正则表达式match()函数

正则表达式match()函数:此方法可在字符串内查找一个或多个正则表达式的匹配.返回值是一个数组,但是此数组的内容和正则对象是否是全局匹配有着很大关系:1.没有g修饰符:此方法只能够在字符串中匹配一次.如果没有找到匹配的字符串,那么返回null,否则将返回一个数组,数组的第0个元素存储的是匹配字符串,第1个元素存放的是第一个引用型分组(子表达式)匹配的字符串,第2个元素存放的是第二个引用型分组(子表达式)匹配的字符串,依次类推.同时此数组还包括两个对象属性,index属性声明的是匹配字符串的起始