Lua的字符串匹配与正则表达式
使用lua一段时间了,简单总结下string库中的几个与正则相关的函数。这些函数是find,match, gmatch和gsub。然后是lua中支持的正则。文中的例子在lua5.3的命令行中试验过。5.1版的需要在提示符前加一个=号或加return空格。
string.find(s, pattern[, init[, plain]])
- 在字符串s中匹配pattern,如果匹配成功返回第一个匹配到的子串的起始索引和结束索引,如果pattern中有分组,分组匹配的内容也会接着两个索引值之后返回。如果匹配失败返回nil。
- 可选数值参数init表示从s中的哪个索引位置开始匹配,缺省值是1,可以为负索引。
可选布尔值参数plain为true时,pattern作为普通字符串匹配,所有正则中的元字符都只被作为普通字符解析。(这个参数并不是匹配字符串的结束索引)
string.find('Hanazawa Kana', 'na')
3 4
string.find('Hanazawa Kana', '[%a]+')
1 8
string.find('2015-5-12 13:53', '(%d+)-(%d+)-(%d+)')
1 9 2015 5 12
string.find('2015-5-12 13:53', '(%d+)-(%d+)-(%d+)', 1, true)
nil
string.find('%a1234567890%a', '%a', 3, true)
13 14
string.match(s, pattern[, init])
在字符串s中匹配pattern,如果匹配失败返回nil。否则,当pattern中没有分组时,返回第一个匹配到的子串;当pattern中有分组时,返回第一个匹配到子串的分组,多个分组就返回多个。可选参数init表示匹配字符串的起始索引,缺省为1,可以为负索引。