您的位置:首页 > 编程语言 > Lua

lua lpeg

2015-08-08 17:19 387 查看
最近再学ulua,记录下

lpeg:基本用来处理字符串的,

local lpeg=require “lpeg”

local p=lpeg。P//匹配一个字符串

local s=lpeg。S//匹配一个集合

local r=lpeg。R//匹配一个范围内的数或者字母

lpeg。match(des,sources)//拿des和sou的第一个字符串进开始行匹配,完全一样则返回des的长度加1,否则直接返回nil

上面的方式默认用的是p的形式

等于lpeg。match(p“des”,sources) p:math(sources)

例子:lpeg。match(p“des”,“des1”)--->4

lpeg。match(s“des”,“des1”)---》2

第一不匹配的话直接返回nil

2.想匹配一样的字符串很多个的时候可以用^

lpeg。match(“a”^1,“aabb”)---》3

lpeg。match(“a”^-1,“aabb”)---》2

lpeg。match(“a”^-1,“baabb”)---》1

当为-1的时候是匹配1或者0个 没匹配到返回1,匹配到了返回2

3.假如想找a后面多个b的情况

lpeg。match(“a”דb”^1,“aabb”)---》错误不能这样写

lpeg。match(p“a”×p“b”^1,“aabb”)---》不能省略输出 nil 匹配失败

lpeg。match(p“a”×p“b”^1,“abb”)--》4

lpeg。match(s“a”×s“b”^1,“abb”)--》4 --s失败了,这样的表达式不支持整体

lpeg。match(p“a”^-1*p“b”^1,“aabb”)-->nil --第一个不影响什么,第二个要B的时候匹配失败

4.+号表示匹配任意一个

lpeg。match(“a”+"b","a")--失败,不能省略的写

lpeg。match(p“a”+p"b","a")--成功为2

lpeg。match(p(“a”+"b"),"a")--失败,没有所谓的结合律

lpeg。match(p“a”^1+p"b"^1,"aaabbb")--3 匹配A成功并且有3个

lpeg。match(p“a”^-1+p"b"^1,"caaabbb")--1因为永远满足条件

lpeg。match(r"09"^1,"45611")--匹配任意个数字

5.有了匹配肯定有捕获

c=lpeg。C(lpeg。R“09”^1,"456")--返回456

c=lpeg。C(s“+-”^1*lpeg。R“09”^1,"+456")--返回+456

c=lpeg。C(s“+-”^-1*lpeg。R“09”^1,"+-456")--错误

c=lpeg。C(p“+-”^1*lpeg。R“09”^1,"+456")--错误

c=lpeg。C(p“+-”^1*lpeg。R“09”^1,"+-456")--前面的表达式必须完全一致 +-456

想要任意一个表达式的时候用S,如果想完全一样则用P

6.特殊的/,将会把结果赋值给一个函数或者是table

ru:

local temp=lpeg。C((s“+-”^1*lpeg。R“09”^1)/tonumber,"-456")+1=== -455

也可以返回多个捕获

ru:

print(lpeg。C(“a”^1)*lpeg。C("b"^1),"aabbcc")--这里测试只会输出aa,不会输出bb 如果开头没有匹配到aa那么直接返回nil
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua lpeg