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 的含義?