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
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中的表的概念及其相关操作方法
- Lua编程示例(二):面向对象、metatable对表进行扩展
- 把Lua编译进nginx步骤方法
- Lua脚本自动生成APK包
- Lua中的元表(metatable)、元方法(metamethod)详解
- Lua中的metatable介绍
- Lua中ipair和pair的区别
- Lua中的函数精讲笔记
- 浅谈Lua的面向对象特性
- 详解Lua中的变量相关知识点
- Lua脚本语言入门笔记
- Lua脚本调用外部脚本
- 详解Lua中的if语句的使用方法
- Lua中调用函数使用点号和冒号的区别
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中强大的元方法__index详解
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua性能优化技巧(一):前言
- Lua中获取table长度问题探讨