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+)')

返回分组: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'

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180620G1SWYF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券