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,
--对当前调用深度进行检测的原因。如果递归太深,编译会报错。在分析的过程中,词法分析器会调用指令生成器,直接生成最终的指令。
--此法分析--语法分析--指令生成