LUA正则表达式不完全指南_第1页
LUA正则表达式不完全指南_第2页
LUA正则表达式不完全指南_第3页
LUA正则表达式不完全指南_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(转)LU正则表达式不完全指南转自剑侠,并稍微修改个别文字。好不容易闲下来,研究了一下正则表达式,然后越钻越深,经过跟大神们讨论学习后,就没有然后了。总之很有用的一个东西,至少对于用户输入的读取方面会比较方便,所以就简单举例说说。注:正则这个比较不好理解,经常容易转不过弯来,个人觉得最好的学习方式就是自己去试,举一反三,才会知道错在哪里,我尽量提供不同种类同样用法的例子方便理解。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。(好吧,这是百度来的)简单来说就是按照一定想法获取与替换字符串。想怎么换就怎

2、么换(真的©©?)日常运用的时候,会遇到的情况比如某段话里带有关键字,多个关键字等日常大战来治疗”收x带价密这时候捕获这些字符串下来进行分析与记录,让你不至于错过某些不应该错过的,或者说自动密那个人预定位置什么的嗯,好像扯远了,那是插件,今天只说。元字符描述匹配任意字符,包括中文、字母、数字、符号等特殊符号转义,例如:为匹配点,为匹配百分比符号,跟用来转义引号是一样的,匹配字母,大小写都匹配,A为匹配除字母外其他字符m匹配对称字符,x为开始匹配字符,为结束匹配字符,可随意指定。例如:为匹配包括在内的所有字符,匹配控制字符,详见百度,为匹配除控制字符外其他字符,匹配数字,到9

3、为匹配除数字外其他字符,匹配小写字母-L为匹配小写字母外其他字符u匹配标点符号,为匹配标点符号外其他字符,匹配空白符号,包括(键四格空白),(新行的标示),(换行的标示),为匹配空白符号外其他字符,匹配大写字母A,U为匹配大写字母外其他字符,匹配字母和数字,为匹配字母和数字外其他字符e匹配十六进制数字,为匹配十六进制数字外其他字符,匹配代表的字符,为匹配字符外其他字符匹配与返回括号内的内容,例如:,匹配与返回带有字样后续内容。详见下自定义匹配字符集,例如:,匹配到以及还有逗号,百分比号跟点,-匹配除字符集以外的其他字符匹配前一字符次或多次,常用于连贯性字符,例如:以单词为单位匹配匹配前一字符次

4、或多次,最长匹配,常用于匹配空白符,例如,将会匹配字符串内所有单个或者连贯空格匹配前一字符次或多次,最短匹配,在进行所有字符匹配时匹配最短,例如:|用则会返回|而则只返回匹配前一字符次或次,例如:匹配正负数字,因为正数不带负号匹配开头,例如:为以数字开头的匹配,可与匹配结尾一同使用匹配结尾,例如:为以数字开头的结尾,可与匹配开头一同使用常用操作参考资料:匹配第一个符合条件的项目的起始位置与终止位置,如果没找到则返回代表目标字符串pattern代表你要匹配的规则,见上面正则表格init代表开始匹配的位置,默认为1,可以是负数,可不填plain布尔值,如果为true时,则执行匹配任何匹配规则不生效

5、,只是简单的字面匹配s="%d+002929aciwe%a+cqoe01230"localx,y=string.find(s,"%d+",1)-匹配数字,一次或多次连续print(x,y)->x=4,y=9s="%d+002929aciwe%a+cqoe01230"localx,y=string.find(s,"%d+",10)-匹配数字,一次或多次连续print(x,y)->x=22,y=26s="%d+002929aciwe%a+cqoe01230"localx,y=string

6、.find(s,"%d+",1,true)-匹配字符”"%d+"print(x,y)->x=1,y=3s="%d+002929aciwe%a+cqoe01230"localx,y=string.find(s,"%a+",1)-匹配字母,一次或多次连续print(x,y)->x=2,y=2s="%d+002929aciwe%a+cqoe01230"localx,y=string.find(s,"%a+",1,true)-匹配字符'"%a+"

7、;print(x,y)->x=15,y=17string.match(s,pattern,init)匹配第一个符合条件的项目s代表目标字符串pattern代表你要匹配的规则,见上面正则表格init代表开始匹配的位置,默认为1,可以是负数,可不填s="1number123xyz"x=string.match(s,"%d+",1)-匹配数字,一次或多次匹配,从第一号位开始找->x=1-返回值是1x=string.match(s,"%d+",2)-匹配数字,一次或多次匹配,从第二号位开始找->x=123-返回值是123x=

8、string.match(s,"%d+",-4)-匹配数字,一次或多次匹配,从右起第四号位开始向右找->x=3x=string.match(s,"%d+",-3)-匹配数字,一次或多次匹配,从右起第三号位开始向右找->x=nilx=string.match(s,"%d*",-3)-匹配数字,零次或多次匹配,从右起第三号位开始向右找->完成匹配,返回空白string.gmatch(s,pattern)返回迭代器,每次调用时会返回符合条件的项目和迭代器,如果没有指定条件,返回整个字符串。s代表目标字符串pattern代表

9、条件s="1number123xyz"forxinstring.gmatch(s,"%d+")do-匹配数字,一次或多次print(x)end->x=1,x=123s="1number123xyz"forxinstring.gmatch(s,"%d-")do-匹配数字,0次或多次,最短匹配,即0次print(x)end->完成匹配,返回空白s="1number123xyz"forxinstring.gmatch(s,"%d*")do-匹配数字,0次或多次,最长匹配

10、print(x)end->1123-中间为空白t=s="hello=123,lua=456"fork,vinstring.gmatch(s,"(%w+)=(%w+)")do-匹配等号两边的数字与字母一次或多次,并且分别返回括号内的两个值tk=vprint(k,v)end->hello123lua456->t="hello"="123","lua"="456"string.sub(s,i,j)返回一项字符串的一部分s为目标字符串i为起始位置j为终止位置,可不填

11、,默认为-1,即使字串结束i,j都可为负数s="我们是快乐的人啊!23333"localx=string.sub(s,1,-6)->x="我们是快乐的人啊!”重点介绍,最常用的string.gsub(s,pattern,repl,n)返回因符合规则被全部或替换n次后的字符串,同时返回匹配成功次数s为目标字符串pattern为规则repI为替换字符串,可为string,function,table。如果为string,则在这里作为一个特殊符号,任何%1到9代表会第几次的返回值(这个返回值是一次匹配成功值下面会介绍),1就是第一个值,9则是第九个。而0则是全部。

12、而%则表示百分比字符。如果repl是function,每次匹配成功将会调用函数,会将匹配到的字符串变为参数,如果没有指定规则,则将整个字符串传为一个参数。如果rep是table,则每次匹配成功都会与table进行比对,如符合array则替换为key值,如没有规则,则以整个字符串作为比对。注:如果function和table的返回值是string或者数字,那么则替换,如果返回false或者nil则不进行替换。n为执行几次替换s="先来最基础简单的”x=string.gsub(s,"基础简单",”复杂困难”)-将"基础简单"替换成”复杂困难”-&g

13、t;x="先来最复杂困难的"s="多次替换数字123,多次替换数字321"x=string.gsub(s,"%d+","lalala")-将数字替换成'lalala"->x="多次替换数字lalala,多次替换数字lalala"s="本末&倒置,开始=逆转"x=string.gsub(s,"(.+)&(.+),(.+)=(.+)","%3%2%4%1")次匹配下返回括号内四个值,并且排列后替换整个

14、字符串->x="开始倒置逆转本末”%1-%4相当于临时变量,将临时变量赋予括号内的值并且将整个字符串替换成临时排列后的变量。%1=本末%2=倒置,%3=开始,4=逆转,而0则是等于整个字符串:本末&倒置,开始=逆转s="hellostringtestworld"x=string.gsub(s,"(%w+)%s*(%w+)","%1",1)-一次匹配返回两个值,将这两个替换成第一个值,只执行一次->x="hellotestworld"由于(w+)%s*(%w+)是匹配两个单词为一对,那么

15、在例子里面符合条件的有两对,一个是hellostring以及testworld。首先匹配到hellostring返回两个值%1=hello,%2=string,然后将整个hellostring替换成hello。而由于值执行一次,所以第二对匹配成功的则不进行替换s="hellostringtestworld"x=string.gsub(s,"(%w+)%s*(%w+)","%0%0",1)-匹配成功后将多复制一次,只执行一次->x="hellostringhellostringtestworld"匹配成功的是h

16、ellostring,两个0代表这个hellostring会出现两次,也就是这个结果了。pattern为函数的,如下例:functiona(s)returnloadstring(s)()endx=string.gsub("2+6=$return2+6$","%$(.-)%$",a)->x="2+6=8"pattern为table的,如下例:localt=name="lua",version="5.1"x=string.gsub("$name-$version.tar.gz&quo

17、t;,"%$(%w+)",t)-匹配table内的项目并且替换掉原有的->x="lua-5.1.tar.gz"说了这么半天,正则主要是看怎么定下规则,其他的应用都听简单的,至于规则的熟悉则要多练习,多实验才能体会到。实际范例:文本=我切,我切|我切。我切我切切切规则=$,。|+结果=我切我切我切我切我切切切(gmatch)文本=讨厌的空格T_T规则=%s*结果=讨厌的空格T_T(gsub)文本=a=3,不作死=就不会死。你要怎么=列表规则=你居然想一步把这个分开,果然作死第一步:用%s*去掉所有空格第二步:将分隔符去掉利用”切切范例”第三步:将等号去掉并为table导入键值结果=a=3,”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论