zoukankan      html  css  js  c++  java
  • Lua 字符串库函数总结

    字符串库

    注:字符串在Lua中是不可变的。不论什么的string操作都不会去改变原有的字符串。都是返回新的字符串

    一、一般函数
    1. 求长度
    s = "Hello LUA ";
    print(string.len(s));
    print(#s);

    2. 反复
    print(string.rep(s,3));   -- s 反复了3次

    3. 大写和小写转换
    print(string.upper(s));  
    print(string.lower(s));

    -- 大写和小写的一个典型用途,假如要对一个字符串进行比較,不区分大写和小写
    table.sort(a, function(a,b) return string.lower(a) < string.lower(b);  end);

    print(s);  -- 没有改变过,Lua中字符串是不可改变的。

    4. 截取子串
    s = "[Hello]";
    print(string.sub(s,2,-2));  -- 这样就去掉了头和尾,负数表示从最后開始索引。-1表示最后一个

    5. 格式化输出
    print(string.format("pi = %.4f",math.pi));  
    print(string.format("%d",12.345));


    二、模式匹配
    1. 查找
    s = "Hello World Hello";
    i, j = string.find(s,"Hello");
    print(i,j, string.sub(s,i,j));

    i, j = string.find(s,"Hello",2);   -- 第三个參数表示从哪里開始搜索
    print(i,j, string.sub(s,i,j));

    2. string.match 可用于模糊匹配 
    date = "Today is 17/7/1990";
    d = string.match(date,"%d+/%d+/%d+");   -- 返回查到结果
    print(d);

    3. 替换
    s = "Lua is cute very cute";
    print(string.gsub(s,"cute","great"));     --返回替换后的字符串和替换的次数
    print(string.gsub(s,"cute","great",1));  -- 第四个參数限制替换的次数

    4. select() 在多个返回值中,获取指定的值
    s = "Hi I am Lua ha ha";
    count = select(2, string.gsub(s," "," "));   -- 用select获取第二个值
    print(count);    -- 获取空格的数目

    5. string.gmatch函数, 会返回一个函数,通过遍历这个函数,能够获取全部匹配到的元素
    words = {};
    for w in string.gmatch(s, "%a+") do   -- "%a+" 匹配一个或多个字母字符序列
    print(w);
    words[#words+1]=w;
    end;

    6. Lua的字符串匹配模式符
    .   表示所有字符
    %a 字母
    %c 控制字符
    %d 数字
    %l 小写字母
    %u 大写字母
    %p 标点符号
    %s 空白字符
    %w 字母和数字
    %x 十六进制数字
    %z 内部表示为0 字符

    模式的修饰符,
    + 表示尽可能多的扩展
    - 表示尽可能少的扩展

    大写形式表示它们的补集。如 %A 表示匹配全部非字符字符

    7. .+ 和 .- 的差别
    -- 查找C程序的凝视
    test = "int x; /* x */ int y; /* y */";
    print(string.gsub(test, "/%*.+%*/","<comment>"));   -- .+会尽可能地扩展,直到最后一个
    print(string.gsub(test, "/%*.-%*/","<comment>"));   -- .-会匹配近期的一个

    演示样例:
    s = "H1e2l34lo 6LU7A";
    print(string.gsub(s,"%A"," "));   -- 把全部非字母的都替换为空格

    s = "-2334 44";
    print(string.gsub(s,"[+-]?

    %d+",""));    --"[+-]?%d+"  [+-]?

    表示可选的,即能够是 -12 或是 12
    print(string.gsub(s,"%d+",""));

    --用%b来匹配成对的字符
    s = "Hi [Lua] end";
    print(string.gsub(s,"%b[]","#"));    -- []这部分被替换掉


    三、捕获
    1. 匹配结果的拆分。当匹配信息放在圆括号里时,假设发现匹配,就能捕获并返回
    date = "Today is 09/05/2014";
    print(string.match(date,"%d+/%d+/%d+"));
    print(string.match(date,"(%d+)/(%d+)/(%d+)"));   -- 加上() 。返回的结果被切割开了。

    2. 可用 %数字 来表示比配到的数值, %0表示所有。 %1 表示匹配到的第一个
    -- 简单格式转换器
    s = "command{some text}";
    print(string.gsub(s, "(%a+){(.-)}", "<%1>%2</%1>"));

    3. 剔除两端空格
    s = " Hi ";
    print(string.gsub(s, "^%s*(.-)%s*$","%1"));    -- (.-) 会试图匹配尽可能少的内容 

    4. 替换, 会将$varname 替换为相应的全局变量, 没有。则不替换
    function expand(s)
    return (string.gsub(s,"$(%w+)",_G));
    end;

    name = "lua"; 
    status= "great";
    print(expand("$name is $status ?

    $yes"));

    5. 定义自己的字符分类, 用[]   
    -- 匹配 !@# 的内容
    s = "fta!asdf@s[df#asdf]##asdf!!";
    print(string.gsub(s,"[!@#]","__"));

    6. 头尾匹配。^会匹配开头部分。$会匹配结尾部分
    s = "-100a";
    print(string.gsub(s, "^[+-]?

    %d+", " "));
    print(string.gsub(s, "^[+-]?%d+$", " "));    -- 检測字符串是否为数字
    s = "11111!";

    print(string.gsub(s, "%p+$", " "));      -- 匹配是否以标点符号结尾,假设是的话,将标点符号去掉


  • 相关阅读:
    三十一:数据库之SQLAlchemy属性常用数据类型和Column常用参数
    xml和configparser模块
    shelve和hashlib模块
    json和pickle序列化模块
    sys模块和shutil模块
    random和os模块
    collections、time和datetime模块
    Python模块及其导入
    Python生成器和迭代器
    Python装饰器
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6721482.html
Copyright © 2011-2022 走看看