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. 定义自己的字符分类, 用[]

-- 匹配 [email protected]# 的内容

s = "[email protected][df#asdf]##asdf!!";

print(string.gsub(s,"[[email protected]#]","__"));

6. 头尾匹配,^会匹配开头部分,$会匹配结尾部分

s = "-100a";

print(string.gsub(s, "^[+-]?%d+", " "));

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

s = "11111!";

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

Lua 字符串库函数总结

时间: 2024-08-28 01:36:24

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

Lua 常用库函数

一.数学库 1. 随机数 math.randomseed(os.time());   -- 设置随机种子 for i=1, 100 do print(math.random(-1000,1000));   -- 随机区间 [-1000,1000], math.random(1000) 表示 [1,1000] end; 2. 最大,最小值 math.max   math.min 二.table 库 1. 插入和删除 a = {10,20,30}; print(unpack(a)); table.i

Lua 字符串

Lua 字符串 字符串或串(String)是由数字.字母.下划线组成的一串字符. Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. 以上三种方式的字符串实例如下: string1 = "Lua" print("\"字符串 1 是\"",string1) string2 = 'runoob.com' print("字符串 2 是",string2) strin

Lua字符串库

Lua字符串库小集 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回字符串s重复n次的结果:    3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变:    4). string.upper(s) 和lower相反,将小写转换为大写:    5). string.sub(s,i,j) 提取字符串s的第i个到第j个

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

? 版权声明:本文为博主原创文章,转载请注明出处 1.Lua字符串 - ''单引号间的一串字符 - ""双引号之间的一串字符 - [[]]之间的一串字符 2.Lua转义字符 3.字符串操作 - string.upper(argument):将字符串全部转换成大写 - string.lower(argument):将字符串全部转换成小写 - string.gsub(mainString, findString, replaceString, num):替换字符串 - mainString

自己动手写字符串库函数 四(C语言)

上一篇 自己动手写字符串库函数 三(C语言) //重置 void my_StrSet(string *des, const char ch) { if (!IsEmpty(des)) return; else { char* des1 = des->str; int desLen = my_StrLen(des->str); while (desLen--) *des1++ = ch; } } //插入字符串 void my_InsertStr(string*strs, const char

Lua字符串库(整理)

Lua字符串库小集 1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回字符串s重复n次的结果:    3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变:    4). string.upper(s) 和lower相反,将小写转换为大写:    5). string.sub(s,i,j) 提取字符串s的第i个到第j个

Lua字符串

本文内容基于版本:Lua 5.3.0 TString结构 • TString结构的声明 Lua字符串对应的C结构为TString,该类型定义在lobject.h中. // lobject.h /* ** Common Header for all collectable objects (in macro form, to be ** included in other objects) */ #define CommonHeader GCObject *next; lu_byte tt; lu

Step By Step(Lua字符串库) (转)

1. 基础字符串函数:    字符串库中有一些函数非常简单,如:    1). string.len(s) 返回字符串s的长度:    2). string.rep(s,n) 返回字符串s重复n次的结果:    3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变:    4). string.upper(s) 和lower相反,将小写转换为大写:    5). string.sub(s,i,j) 提取字符串s的第i个到第j个字符.Lua中,第一

Lua字符串及字符串匹配

--lua中字符串索引从前往后是1,2,--,从后往前是-1,-2--. --string库中所有的function都不会直接操作字符串,只返回一个结果  基本函数 函数 描述 示例 结果 len 计算字符串长度 string.len("abcd") 4 rep 返回字符串s的n个拷贝(repeat重复) string.rep("abcd",2) abcdabcd lower 返回字符串全部字母大写 string.lower("AbcD") ab