字符串库



注:字符串在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+$", " "));      -- 匹配是否以标点符号结尾,假设是的话,将标点符号去掉

Lua 字符串库函数总结的更多相关文章

  1. Lua基础---lua字符串库函数详解,实例及正则表达式

    参考这个网友写的,比较简单容易理解. http://blog.csdn.net/wlgy123/article/details/49206183

  2. lua字符串

    本文内容基于版本:Lua 5.3.0 概述 Lua字符串中的合法字符可以是任何的1字节数据,这包括了C语言中表示字符串结束的'\0'字符,也就是说Lua字符串在内部将以带长度的内存块的形式存储,存储的 ...

  3. Lua字符串库(整理)

    Lua字符串库小集 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回 ...

  4. lua 字符串

    lua 字符串 语法 单引号 双引号 "[[字符串]]" 示例程序 local name1 = 'liao1' local name2 = "liao2" lo ...

  5. cocos2d-x -Lua 字符串

    字符串或串(String)是由数字.字母.下划线组成的一串字符. Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. 以上三种方式的 ...

  6. Lua学习九----------Lua字符串

    © 版权声明:本文为博主原创文章,转载请注明出处 1.Lua字符串 - ''单引号间的一串字符 - ""双引号之间的一串字符 - [[]]之间的一串字符 2.Lua转义字符 3.字 ...

  7. Lua 学习之基础篇三<Lua 字符串操作>

    Lua字符串可以使用以下三种方式表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. string = [["Lua"]] print("字符串 ...

  8. C语言讲义——字符串库函数

    字符串库函数<string.h> 求字符串长度(不含结束符'\0'****) strlen(str) 字符串赋值(可能造成数组越界) strcpy(str," 水浒传 " ...

  9. Step By Step(Lua字符串库)

    Step By Step(Lua字符串库) 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string ...

随机推荐

  1. win8.1快速启动选项突然消失了怎么办?

    win8开始提供的快速启动功能是一种混合式的休眠模式,Windows系统 在关机时将系统的信息保存到硬盘上的一个文件中来实现下一次的快速启动.当再次启动电脑时, Windows 使用该系统信息文件来恢 ...

  2. 使用Bootstrap 3开发响应式网站实践07,页脚

    页脚部分比较简单,把一个12列的Grid切分. <footer> <div class="container"> <div class="r ...

  3. python笔记1-用python解决小学生数学题

    前几天有人在群里给小编出了个数学题: 假设你有无限数量的邮票,面值分别为6角,7角,8角,请问你最大的不可支付邮资是多少元? 小编掰着手指头和脚趾头算了下,答案是:1.7元 那么问题来了?为啥是1.7 ...

  4. remotepath != null 与 !TextUtils.isEmpty(remotepath) 的差别

    remotepath != null   与 !TextUtils.isEmpty(remotepath) 的差别 !TextUtils.isEmpty(remotepath)    与   remo ...

  5. struts2怎么实现页面到页面之间的传值?

    我要实现一个产品订购的功能,在浏览产品的时候通过点击一个订购的链接,跳转到提交订单的页面,在跳转的同时要把浏览的产品的名称和型号传到提交订单的页面,并且把这里的订单类的产品名称和型号的表单域里赋上传递 ...

  6. Lua简明教程

    这几天系统地学习了一下Lua这个脚本语言,Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本,当你把他的源码下下来编译 ...

  7. vijos p1729 Knights

    描述 在一个N*N的正方形棋盘上,放置了一些骑士.我们将棋盘的行用1开始的N个自然数标记,将列用'A'开始的N个大写英文字母标记.举个例子来说,一个标准的8*8的国际象棋棋盘的行标记为1..8,列标记 ...

  8. C++迭代器失效的几种情况总结

    一.序列式容器(数组式容器) 对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效.这是因为vetor,deque ...

  9. VueJS如何引入css或者less文件的一些坑

    我们在做Vue+webpack的时,难免会引入各种公共css样式文件,那么我们改如何引入呢?引入时会有那些坑呢? 首先,引入公共样式时,我们在“main.js”里使用AMD的方式引入,即 requir ...

  10. 伪元素 :Before 和 :After的学习

    层叠样式表(CSS)的主要目的是给HTML元素添加样式,然而,在一些案例中给文档添加额外的元素是多余的或是不可能的.事实上CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,这就是“伪元素”. 你 ...