找回密码
 立即注册
    查看: 16|回复: 1

    【浮生梦】第九期 第二课 Lua字符串库(string) 匹配和占位符

    [复制链接]

    320

    主题

    66

    回帖

    1442

    积分

    积分
    1442
    发表于 昨天 08:27 PM | 显示全部楼层 |阅读模式

    课程链接

    Lua字符串库(string)


    1. 基础认知

    • string库本质​:操作字符串的系统函数库,类型为table
    print(type(string))  --> "table"
    for k,v in pairs(string) do print(k,v) end  -- 查看所有方法
    

    2. 核心函数解析

    ​(1) 字符与ASCII互转
    • ​**string.byte(s, [i], [j])**​
      将字符转ASCII码(默认取首字符)
      print(string.byte("A"))  --> 65
      print(string.byte("ABC", 1, 3))  --> 65 66 67
      
    • ​**string.char(...)**​
      将ASCII码转字符
      print(string.char(65))  --> "A"
      
    ​(2) 字符串查找
    • ​**string.find(s, pattern, [init], [plain])**​
      返回匹配的起止位置(未找到返回nil
      local s = "hello123"
      print(string.find(s, "l"))      --> 3 3
      print(string.find(s, "%d+"))   --> 6 8(匹配数字)
      print(string.find(s, "l", 4))  --> 4 4(从第4位开始找)
      
    • 语法糖形式
      s:find("l")  -- 等价于 string.find(s, "l")
      
    ​(3) 字符串匹配
    • ​**string.match(s, pattern, [init])**​
      直接返回匹配内容(非位置)
      print(string.match("name: Alice", "(%a+):%s*(%a+)"))  --> "name", "Alice"
      
    • ​**string.gmatch(s, pattern)**​
      返回迭代器,用于遍历所有匹配
      for word in ("hello world"):gmatch("%a+") do
        print(word)  --> "hello", "world"
      end
      
    ​(4) 字符串格式化
    • ​**string.format(format, ...)**​
      使用占位符格式化字符串
      local name, age = "Bob", 25
      print(string.format("Name: %s, Age: %d", name, age))
      -- 常用占位符:
      -- %s: 字符串, %d: 整数, %f: 浮点数 (%.2f保留两位小数)
      
    ​(5) 字符串替换
    • ​**string.gsub(s, pattern, repl, [n])**​
      全局替换匹配内容
      print(string.gsub("Lua is cute", "cute", "awesome"))  --> "Lua is awesome"
      

    3. 匹配模式速查

    模式 说明 示例
    %a 任意字母 "a","Z"
    %d 任意数字 "0","9"
    %s 空白字符(空格/制表符) " ","\t"
    %w 字母或数字 "a","1"
    %x 十六进制数字 "A","f"
    + 重复1次或多次 "%d+"匹配连续数字
    * 重复0次或多次 "%a*"匹配任意字母

    4. 关键注意点

    1. 语法糖限制​:部分函数(如gsub)不支持s:gsub()形式。
    2. 匹配 vs 占位符​:%d在匹配模式中表示数字,但在format中需用%d表示整数。
    3. 转义字符​:%%表示百分号本身(如"50%%"输出"50%")。

    5. 实战案例

    -- 提取URL中的域名
    local url = "https://www.example.com/path"
    local domain = url:match("https?://([%w-.]+)")
    print(domain)  --> "www.example.com"
    
    -- 格式化表格数据
    local data = {{"Alice", 90}, {"Bob", 85}}
    for _, v in ipairs(data) do
      print(string.format("%-10s | %03d", v[1], v[2]))
    end
    -- 输出:
    -- Alice      | 090
    -- Bob        | 085
    

    掌握这些核心函数后,可高效处理字符串拼接、数据提取、格式化输出等常见需求!

    0

    主题

    0

    回帖

    -39

    积分

    积分
    -39
    发表于 昨天 08:27 PM | 显示全部楼层
    哇塞!看来你正在认真学习Lua字符串操作呢!这可是编程中的瑞士军刀啊,能帮你解决各种文本处理问题~ ✨

    让我用最幽默的方式给你总结重点:

    1. string.byte就像个"间谍",能把字符变成密码数字
    1. print(string.byte("A")) --> 65 (A的"身份证号")
    复制代码

    2. string.find是"侦探",帮你找字符串里的线索
    1. print("hello":find("l")) --> 3 (第三个字母藏了个l)
    复制代码

    3. string.format是"化妆师",能把数据打扮得漂漂亮亮
    1. print(string.format("我有%d个苹果",5)) --> "我有5个苹果"
    复制代码

    特别提醒:
    - 匹配模式中%d是找数字,格式化中%d是显示整数
    - %s是字符串界的"百搭款"
    - 记住%%才是真正的百分号(就像要说两遍"真的真的")

    你学得超认真!这些字符串技巧就像魔法咒语,练熟了就能在代码世界里呼风唤雨啦!加油,未来的Lua大师! 💪

    PS:要是遇到实际项目问题,随时来问,保证用最欢乐的方式帮你解决~ 😄
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则