Lua中字符串与模式匹配(正则表达式)

Posted 飞鹰技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua中字符串与模式匹配(正则表达式)相关的知识,希望对你有一定的参考价值。

lua中字符串操作能力有限,通过字符串库(模块string)实现增强功能。



字符串基本操作

操作符(..)实现字符串的连接

string.len(s):返回字符串的长度

字符索引从前往后是1,2,...;从后往前是-1,-2,...


string库中所有的function都不会直接操作字符串,而是返回一个结果

  • string.lower(s):变小写.

  • string.upper(s):变大写.

  • string.rep(s,n):将s拷贝n份,并连接起来,返回.

  • string.sub(s,i [,j]):取s中从i开始到j为止的自字符串,默认j为长度;-i表示倒数



字符串查找

i, j = string.find(s, pattern[, start]) 

pattern:要查找的模式串或子串

找到返回匹配串开始和结束的位置;否则返回nil。


string.match(s, pattern[, start]) 

找到返回匹配的子串(或分组);否则返回nil

如:

string.match('2015-5-12 13:53', '%d+-%d+-%d+')

返回子串:2015-5-12

string.match('2015-5-12 13:53', '(%d+)-(%d+)-(%d+)')

返回分组:2015 5 12


string.gmatch(s, pattern) 返回一个迭代器

for k, v in string.gmatch('a=111,b=222', '(%w+)=(%w+)') do

     print(k, v) end

a 111

b 222



替换gsub

string.gsub(s, pattern, reps):使用reps替换pattern

string.gsub(s, pattern, func):对于每一个匹配,调用func函数


print(string.gsub("hello Lua", "(%w+) (%w+)", "%2,%1")) 

返回:Lua,hello

string.gsub("hello Lua; hello Lua; hello Lua", "(%w+) (%w+)", 

    function(first, second) do

        print(first,second)

    end



模式匹配

模式串中的特殊字符 ( ) . % + - * ? [ ^ $

  • '%' 用作特殊字符的转义字符

  • '%.' 匹配点;

  • '%%' 匹配字符 '%'


元字符

.  (点号)

任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p
标点符号
%s
空白符
%u
大写字母
%w
字母和数字
%x
十六进制
%z
代表0的字符

上面字符类的大写形式表示小写所代表的集合的补集。例如, '%A'非字母的字符


模式修饰符

  • + 匹配前一字符1次或多次

  • * 匹配前一字符0次或多次;最长匹配

  • - 匹配前一字符0次或多次;最短匹配

  • ? 匹配前一字符0次或1次

  • ^ 匹配字符串开头

  • $ 匹配字符串结尾


用'[]'创建字符集

  • '[%w_]' 匹配字母数字和下划线

  • '[01]' 匹配二进制数字

  • '[%[%]]'匹配一对方括号

  • 在'[]'中使用连字符'-'

  • '%d'    表示 '[0-9]';

  • '%x'    表示 '[0-9a-fA-F]'

  • '[0-7]' 表示 '[01234567]'

  • 在'[]'开始处使用 '^' 表示其补集:

    • '[^0-7]' 匹配任何不是八进制数字的字符;

    • '[^\n]' 匹配任何非换行符户的字符。

    • '[^%s]' == '%S'


以上是关于Lua中字符串与模式匹配(正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章

Lua 正则表达式

Lua中的正则表达式

Lua模式匹配

使用正则表达式匹配 Lua 多行字符串和注释

Lua模式匹配

lua正则匹配中\t是啥意思?