0
点赞
收藏
分享

微信扫一扫

Lua笔记 8

1. Lua实现模式匹配,没有使用POSIX正则表达式和Perl正则表达式。

 一个典型的POSIX正则实现需要超过4000多行代码,比所有Lua语言标准库总大小的一半还大。

 Lua实现模式匹配代码不到600行。不如POSIX强大,但够用。

 字符串标准库基于模式4个函数:find(返回出现模式的位置),match(返回和模式匹配的字符串,以及位置),gmatch(返回出现模式的迭代器),gsub(出现模式的地方替换字符串,以及替换次数)。

2. 字符分类:

Lua笔记 8_字符串

 

 

Lua笔记 8_字符串_02

 

 除此之外,大写形式代表其补集。比如,%A代表任意非字母的字符。

 除此之外,自定义字符分类。使用方括号。比如,[0-9] 等价于 %d。  备注:短横线的使用,代表某段字符范围。

      自定义补集,使用^。比如,[^\n]代表除换行外其他字符。

 注意:使用字符分类,最好括起来。

3. 修饰符

Lua笔记 8_修饰符_03

 

 举例:1.  *  使用例子,为了匹配像 () 或 () 这样的空 括号对,就可以使用模式 %(%s*%)

    2.  跟 修饰符*总是匹配能匹配的最长序列不同。修饰符 - 只会匹配最短序列,比如找到第一个字母。

      /%*.*%*/代表匹配第一个/*和最后一个/* (类似正则的贪婪匹配)。

           /%*.-%*/代表匹配到找到第一个*/

       3. ?举例,比如匹配 +1,-20,78 这三个数值。[+-]?%d+

       4. lua中的修饰符只作用于一个字符模式。

4. 其他

    1. ^和$代表从目标字符串的开头或至结尾匹配。只有位于模式的开头和结尾时才有特殊含义。比如查找以什么开头或结尾等 ^[+-]%d$。

    2. %b 匹配成对的字符串。比如%xy表示以x开始y结尾

       3. %f[char-set] 前置模式,代表 只有在后一个字符位于 char-set 内而前一个字符不在时匹配一个空字符串。举例:

s =”the anthem is the theme” 
Print((string.gsub(s ,”%f[%w]the%f[%W]”,” one ”)))
--> one anthem is one theme    注意两个one,第一个字符前当成空字符

1.模式’%f[%w]’ 匹配位于一个非字母或数字的字符和一个字母或数字的字符之间的前置
2.模式’%f[%W]’则匹配一个字母或数字的字符和一个非字母或数字的字符之间的前置
3.指定的模式会匹配完整的单词the。
4.目标字符串的前后各有一个空字符(ASCII编码 \0)。

 




举报

相关推荐

0 条评论