lua string.gsub

string.gsub (s, pattern, repl [, n])

:全局替换字符串;将字符串 s中,所有的(或是在 n给出时的前 n个) pattern 都替换成 repl,并返回其副本,不会改变字符串s。
s: 源字符串
pattern: 匹配模式
repl: replacement, 将 pattern匹配到的字串替换为 repl
[, n]: 可选, 表示只替换源字符串匹配到的前 n 个
**特殊字符:(). % + - * ? [ ^ $ **
**Lua 中的模式修饰符有四个: **

  1. + 匹配前一字符 1 次或多次,最长匹配
  2. * 匹配前一字符 0 次或多次,最长匹配
  3. - 匹配前一字符 0 次或多次,最短匹配
  4. ? 匹配前一字符 0 次或 1次
local a = "abc[a][bc][def]-[1][23][456]"
print(string.gsub(a, "%d+", "我"))-->abc[a][bc][def]-[我][我][我]   3
print(string.gsub(a, "%d+", "我", 2))-->abc[a][bc][def]-[我][我][456]  2
local function testGsub(str)
    print(str)
end
print(string.gsub(a, "(%d+)", testGsub))
--> 1
-- >23
-- >456
-->abc[a][bc][def]-[1][23][456] 3
print(string.gsub(a, "[%d-]", "我"))-->abc[a][bc][def]我[我][我我][我我我]  7
print(string.gsub(a, "%[%d-]", "我"))-->abc[a][bc][def]-我我我  3
print(string.gsub(a, "[bc]", "我"))-->a我我[a][我我][def]-[1][23][456]   4
print(string.gsub(a, "%w", "我"))-->我我我[我][我我][我我我]-[我][我我][我我我] 15
print(string.gsub(a, "[efg*]", "我"))-->abc[a][bc][d我我]-[1][23][456] 2
print(string.gsub(a, "efg*", "我"))-->abc[a][bc][d我]-[1][23][456]    1

local tab = {a = "你", bc = "我", def = "他"}
print(string.gsub(a, "%a+", tab))-->abc[你][我][他]-[1][23][456]   4
print(string.gsub(a, "[%d+]", "%0我"))-->abc[a][bc][def]-[1我][2我3我][4我5我6我]  6

未解决问题:

  1. 如何只匹配a中的两位数,即“23”?
  2. repl中 %d 的含义?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言# 一个string家族的重磅函数将和大家见面了,函数查找子串并替换,这个函数的用法多样,但是配合所给的例子都...
    AlbertS阅读 81,046评论 2 11
  • re模块手册 本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以...
    喜欢吃栗子阅读 4,050评论 0 13
  • string库提供了字符串处理的通用函数。 例如字符串查找、子串、模式匹配等。 当在 Lua 中对字符串做索引时,...
    chiguozi阅读 3,913评论 0 3
  • 在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台...
    果果哥哥BBQ阅读 5,922评论 0 8
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4