lua详细解读和正则表达式

1.类似正则表达式的规则。

 1、wireshark基本的语法字符

\d          0-9的数字

\D          \d的补集(以所以字符为全集,下同),即所有非数字的字符

\w          单词字符,指大小写字母、0-9的数字、下划线(密码,C语言变量)

\W          \w的补集

\s          空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f

\S          \s的补集

.          除换行符\n外的任意字符。 在Perl中,“.”可以匹配新行符的模式被称作“单行模式”

.*       匹配任意文本,不包括回车(\n)? 。 而,[0x00-0xff]*        匹配任意文本,包括\n

[…]          匹配[]内所列出的所有字符

[^…]          匹配非[]内所列出的字符


2.定位字符  所代表的是一个虚的字符,它代表一个位置,你也可以直观地认为“定位字符”所代表的是某个字符与字符间的那个微小间隙。

^          表示其后的字符必须位于字符串的开始处

$          表示其前面的字符必须位于字符串的结束处

\b          匹配一个单词的边界

\B          匹配一个非单词的边界


3.重复描述字符--{}表示重复次数

{n}          匹配前面的字符n次

{n,}          匹配前面的字符n次或多于n次

{n,m}          匹配前面的字符n到m次

?          匹配前面的字符0或1次

+          匹配前面的字符1次或多于1次

*          匹配前面的字符0次或式于0次

 


  • 正则表达式中[]和()的区别
  • 圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理
  • 方括号是单个匹配,字符集/排除字符集/命名字符集
  • [0-3],表示找到这一个位置上的字符只能是0到3这四个数字,与(abc|bcd|cde)的作用比较类似,但圆括号可以匹配多个连续的字符,而一对方括号只能匹配单个字符
  • [^0-3],表示找到这一个位置上的字符只能是除了0到3之外的所有字符
  • ()和[]有本质的区别
    ()内的内容表示的是一个子表达式,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多3次。如果没有括号的话,ab{1,3},就表示a,后面紧跟的b出现最少1次,最多3次。另外,括号在匹配模式中也很重要。这个就不延伸了,LZ有兴趣可以自己查查
    []表示匹配的字符在[]中,并且只能出现一次,并且特殊字符写在[]会被当成普通字符来匹配。例如[(a)],会匹配(、a、)、这三个字符。

--lua
-----------------------------------------
--正则表达式(基本语法)
-----------------------------------------
--string.find
--string.match
--string.gsub
--string.len
--string.lower
--string.upper
--string.reverse
-----------------------------------------
--static const luaL_Reg strlib[] = {
--  {"byte", str_byte},
--  {"char", str_char},
--  {"dump", str_dump},
--  {"find", str_find},
--  {"format", str_format},
--  {"gmatch", gmatch},
--  {"gsub", str_gsub},
--  {"len", str_len},
--  {"lower", str_lower},
--  {"match", str_match},
--  {"rep", str_rep},
--  {"reverse", str_reverse},
--  {"sub", str_sub},
--  {"upper", str_upper},
--  {"pack", str_pack},
--  {"packsize", str_packsize},
--  {"unpack", str_unpack},
--  {NULL, NULL}
--};
--注册--回调到_G(表或链表)
--LUAMOD_API int luaopen_os (lua_State *L) {
--  luaL_newlib(L, syslib);
--  return 1;
--}
---------------------------------------
--lua如何解析lua文件
--1. 文件输入 lua 2019-1-5.lua
--从 Lua 5.1 以后,Lua 有了标准的模块管理库。所以所有的模块加载都是通过 require 来完成。
--package.path在虚拟机启动的时候设置,如果存在环境变量LUA_PATH,那么就用该环境变量作为
--它的值,并把这个环境变量中的";;"替换为luaconf.h中定义的默认值,如果不存在该变量就直接使用
--luaconf.h定义的默认值。
-->按路径查找require("test"),将其加载进来,库函数就可以使用
--华为自定义库(扩展库)/系统库,两种库的实质一样的
--自定义库和系统库加载进来后,就成为全局函数,变量,全部都是c代码,编译成动态链接库(强大的Makefile)
-------------------------------------------------------------------------------------------
--词法分析模块llex.h.c:Lua的词法分析模块比较简单而且独立,就是将源代码拆分成一个个token,
--提供给语法分析使用。语法分析程序会调用luaX_next来获取下一个单词,然后进行语法分析。
--语法分析器是整个编译过程的驱动器。通过对luaY_parser函数的调用,启动整个编译过程。
--语法分析采用“递归下降”的方法,从词法分析器中读取下一个token,然后根据这个token和lua的语法规则,
--将高层的语法规则分解成底层的语法规则,进一步进行分析。根据语法,“递归”在lua语法中只出现在两个地方,
--一个是statement函数,一个是subexpr函数。这也就是在这两个函数中调用enterlevel和leaveleavel,
--对当前调用深度进行检测的原因。如果递归太深,编译会报错。在分析的过程中,词法分析器会调用指令生成器,直接生成最终的指令。
--此法分析--语法分析--指令生成

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值