美文网首页
lua string.gsub

lua string.gsub

作者: YYRise | 来源:发表于2016-07-16 15:36 被阅读236次

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

    相关文章

      网友评论

          本文标题:lua string.gsub

          本文链接:https://www.haomeiwen.com/subject/oocujttx.html