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中字符串与模式匹配(正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章