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+)')
返回分组:2015512
string.gmatch(s, pattern) 返回一个迭代器
for k, v in string.gmatch('a=111,b=222', '(%w+)=(%w+)') do
print(k, v) end
a111
b222
替换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'非字母的字符
模式修饰符
+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次;最长匹配
- 匹配前一字符0次或多次;最短匹配
? 匹配前一字符0次或1次
^ 匹配字符串开头
$ 匹配字符串结尾
用'[]'创建字符集
'[^0-7]' 匹配任何不是八进制数字的字符;
'[^\n]' 匹配任何非换行符户的字符。
'[^%s]' == '%S'
领取专属 10元无门槛券
私享最新 技术干货