string.gsub (s, pattern, repl [, n])
:全局替换字符串;将字符串 s中,所有的(或是在 n给出时的前 n个) pattern 都替换成 repl,并返回其副本,不会改变字符串s。
s: 源字符串
pattern: 匹配模式
repl: replacement, 将 pattern匹配到的字串替换为 repl
[, n]: 可选, 表示只替换源字符串匹配到的前 n 个
**特殊字符:(). % + - * ? [ ^ $ **
**Lua 中的模式修饰符有四个: **
- + 匹配前一字符 1 次或多次,最长匹配
- * 匹配前一字符 0 次或多次,最长匹配
- - 匹配前一字符 0 次或多次,最短匹配
- ? 匹配前一字符 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
未解决问题:
- 如何只匹配a中的两位数,即“23”?
- repl中 %d 的含义?