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+$", " ")); -- 匹配是否以标点符号结尾,假设是的话,将标点符号去掉
Lua 字符串库函数总结的更多相关文章
- Lua基础---lua字符串库函数详解,实例及正则表达式
参考这个网友写的,比较简单容易理解. http://blog.csdn.net/wlgy123/article/details/49206183
- lua字符串
本文内容基于版本:Lua 5.3.0 概述 Lua字符串中的合法字符可以是任何的1字节数据,这包括了C语言中表示字符串结束的'\0'字符,也就是说Lua字符串在内部将以带长度的内存块的形式存储,存储的 ...
- Lua字符串库(整理)
Lua字符串库小集 1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度: 2). string.rep(s,n) 返回 ...
- lua 字符串
lua 字符串 语法 单引号 双引号 "[[字符串]]" 示例程序 local name1 = 'liao1' local name2 = "liao2" lo ...
- cocos2d-x -Lua 字符串
字符串或串(String)是由数字.字母.下划线组成的一串字符. Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. 以上三种方式的 ...
- Lua学习九----------Lua字符串
© 版权声明:本文为博主原创文章,转载请注明出处 1.Lua字符串 - ''单引号间的一串字符 - ""双引号之间的一串字符 - [[]]之间的一串字符 2.Lua转义字符 3.字 ...
- Lua 学习之基础篇三<Lua 字符串操作>
Lua字符串可以使用以下三种方式表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. string = [["Lua"]] print("字符串 ...
- C语言讲义——字符串库函数
字符串库函数<string.h> 求字符串长度(不含结束符'\0'****) strlen(str) 字符串赋值(可能造成数组越界) strcpy(str," 水浒传 " ...
- Step By Step(Lua字符串库)
Step By Step(Lua字符串库) 1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度: 2). string ...
随机推荐
- Windows程序的打包,部署(vs项目打包vs2013)---ShinePans
Windows 应用程序在开发完毕之后,怎样将程序打包并制作成安装程序在客户机上部署 是每一个windows应用程序开发完毕之后都必须面对的问题. 学习目标: 部 ...
- [MySql]锁表与解锁
摘要 为啥会出现锁表的情况?锁表会导致数据表的其他操作超时,频繁的插入修改查询很容易出现锁表的情况.如果遇到这种情况,临时的解决办法,可以通过下面的方式进行解锁.如果长期有效的解决,那么就需要优化项目 ...
- MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射
本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...
- firedac使用UNIXODBC连接SQLSERVER
firedac使用UNIXODBC连接SQLSERVER 1)下载 SQL SERVER ODBC DRIVER FOR 64-BIT LINUX. 如果你有旧版mssql 工具安装,请删除任何较旧的 ...
- C#编程(八)--------- Main函数
Main()方法. C#程序是以Main()开始执行的,这个方法必须是类或结构的静态方法,并且其返回类型必须是int或者void. 虽然显示指定public修饰符很常见,但是我们也可以把该方法标记为p ...
- VS2010属性
基于virtual studio 所有工程属性和 工程属性 这是VS2010的改变,不能够在“工具-选项”中看到“VC++目录”了. 但是呢,我们可以在另外一个地方找到它,请看下边的对比照片. VS ...
- 在进行form提交时,根据form的选择,在javascript中进行特定提交
1.html代码片段 <form name="form1" method="post" action=""> <selec ...
- JBoss 系列一 O O:Maven jBPM 6 集成演示样例
概述 jBPM 6 中底层架构基于 Maven,所以我们能够非常easy的进行 Maven jBPM 6 集成演示样例,本文分三个部分: 基本原理介绍 Maven jBPM 6 集成 jBPM 6 中 ...
- scala编程第17章学习笔记(1)——集合类型
列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ...
- GPU/CUDA程序初体验 向量加法
现在主要的并行计算设备有两种发展趋势: (1)多核CPU. 双核,四核,八核,...,72核,...,可以使用OpenMP编译处理方案,就是指导编译器编译为多核并行执行. (2)多线程设备(GP)GP ...