1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...
2. string库中所有的function都不会直接操作字符串,而是返回一个结果

string.byte(string [,pos]):返回第pos个字符的整数表示形式.如a为97.

string.char(i1,i2...):i1,i2为整型,将i1,i2..等转化为对应的字符然后连接成字符串,并返回.如i1=97则返回a.

string.dump(functoin):返回一个参数函数的2进制代码.(疑问)

string.find(s,pattern [,init [,plain]]):查找pattern在s中的位置,返回pattern在s中的开始位置和结束位置.init是开始查找的位置.plain未知.

string.len(s):返回字符串的长度.

string.lower(s):变小写.

string.upper(s):变大写.

string.rep(s,n):将s拷贝n份,并连接起来,返回.

string.sub(s,i [,j]):取s中从i开始到j为止的自字符串.默认j为长度.-i表示倒数.

例如:

s = "[abc]"
string.len(s)        <==返回5

string.rep("abc", 2) <==返回"abcabc"
string.lower("ABC") <==返回"abc"
string.upper("abc") <==返回"ABC"
string.sub(s, 2)     <==返回"abc]"
string.sub(s, -2)    <==返回"c]"
string.sub(s, 2, -2) <==返回"abc"
string.format(fmt, ...)返回一个类似printf的格式化字符串

string.find(s, pattern, pos) 
第1个参数:源字符串
第2个参数:待搜索之模式串
第3个参数:A hint, 从pos位置开始搜索
找到匹配返回:匹配串开始和结束的位置,否则返回nil

例如:
s = "[abc]"
string.len(s)        <==

string.gsub(s, pattern, reps)
第1个参数:源字符串
第2个参数:待替换之模式串
第3个参数:替换为reps
将s中所有符合pattern的字串替换为reps,返回结果串+匹配数

print(string.gsub("hello, world", "o", "a"))       <== hella, warld        2

gsub也可以用拷贝捕获技巧
print(string.gsub("hello, world", "(o)", "%1-%1")) <== hello-o, wo-orld    2
print(string.gsub("hello Lua", "(.)(.)", "%2%1")) <== ehll ouLa           4

function trim (s) return (string.gsub(s, "^%s*(.-)%s*$", "%1")) end <== 注意匹配数用括号丢弃

string.gsub(s, pattern, func)
第3个参数:自定义函数,对找到的匹配操作,并传出替换值
s, n = string.gsub("hello world", "l+", function(s) return "xxx" end) 
print(s, n) <== hexxxo worxxxd 2

string.gfind(s, pattern)
返回一个迭代器,迭代器每执行一次,返回下一个匹配串;
iter = string.gfind("a=b c=d", "[^%s+]=[^%s+]")
print(iter()) <== a=b
print(iter()) <== c=d

通常用于泛性for循环,下面的例子结果同上
for s in string.gfind("a=b c=d", "[^%s+]=[^%s+]") do
print(s)
end简单的模式串
s = "hello world"
i, j = string.find(s, "hello")
print(i, j) --> 1 5
print(string.sub(s, i, j)) --> hello
print(string.find(s, "world")) --> 7 11
i, j = string.find(s, "l")
print(i, j) --> 3 3
print(string.find(s, "lll")) --> nil

格式化的模式串
s = "Deadline is 30/05/1999, firm"
date = "%d%d/%d%d/%d%d%d%d"
print(string.sub(s, string.find(s, date))) --> 30/05/1999

下面的表列出了Lua支持的所有字符类:
. 任意字符
%s 空白符

%p 标点字符
%c 控制字符

%d 数字
%x 十六进制数字

%z 代表0的字符
%a 字母
%l 小写字母
%u 大写字母
%w 字母和数字

上面字符类的大写形式表示小写所代表的集合的补集。例如,'%A'非字母的字符:

模式串中的特殊字符
( ) . % + - * ? [ ^ $

'%' 用作特殊字符的转义字符
'%.' 匹配点;
'%%' 匹配字符 '%'。
转义字符 '%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。当对一个字符有疑问的时候,为安全起见请使用转义字符转义他。

用'[]'创建字符集
'[%w_]' 匹配字母数字和下划线
'[01]' 匹配二进制数字
'[%[%]]'匹配一对方括号

在'[]'中使用连字符'-'
'%d'    表示 '[0-9]';
'%x'    表示 '[0-9a-fA-F]'
'[0-7]' 表示 '[01234567]'

在'[]'开始处使用 '^' 表示其补集:
'[^0-7]' 匹配任何不是八进制数字的字符;
'[^/n]' 匹配任何非换行符户的字符。
'[^%s]' == '%S'

模式修饰符

+ 匹配前一字符1次或多次
* 匹配前一字符0次或多次;最长匹配
- 匹配前一字符0次或多次;最短匹配
? 匹配前一字符0次或1次
^ 匹配字符串开头 
$ 匹配字符串结尾

捕获:用()将要捕获的部分包围起来
pair = "name = Anna"
firstidx, lastidx, key, value = string.find(pair, "(%a+)%s*=%s*(%a+)")
print(key, value) <== name Anna

拷贝捕获(%1-%9)
s = "abc /"it/'s a cat/""
_,_,_,q = string.find(s, "([/"'])(.-)%1"))
print(q) <== it's a cat 如果%d代表第几个捕获的拷贝。

原文链接:http://blog.csdn.net/nmn0317/article/details/4933207

Lua string库详解的更多相关文章

  1. Lua IO库详解

    I/O 库提供了两套不同风格的文件处理接口. 第一种风格使用隐式的文件句柄: 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件. 第二种风格使用显式的文件句柄. 当使 ...

  2. Lua的协程和协程库详解

    我们首先介绍一下什么是协程.然后详细介绍一下coroutine库,然后介绍一下协程的简单用法,最后介绍一下协程的复杂用法. 一.协程是什么? (1)线程 首先复习一下多线程.我们都知道线程——Thre ...

  3. Struts标签库详解【3】

    struts2标签库详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri= ...

  4. php中的PDO函数库详解

    PHP中的PDO函数库详解 PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,P ...

  5. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  6. VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三

    目录 目录 前文列表 VixDiskLib 虚拟磁盘库 VixDiskLib_GetMetadataKeys VixDiskLib_ReadMetadata 获取虚拟磁盘元数据 VixDiskLib_ ...

  7. 最强常用开发库总结 - JSON库详解

    最强常用开发库总结 - JSON库详解 JSON应用非常广泛,对于Java常用的JSON库要完全掌握.@pdai JSON简介 JSON是什么 JSON 指的是 JavaScript 对象表示法(Ja ...

  8. 常用开发库 - MapStruct工具库详解

    常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...

  9. 【转】Java魔法堂:String.format详解

    Java魔法堂:String.format详解     目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六. ...

随机推荐

  1. 实践 ArcGIS Web 3D

    ArcGIS 产品家族的 Web 3D 功能众多用户期待已久.从 ArcGIS 10.3.1 版本号開始,Esri 放了个大招,千呼万唤始出来的 Web 3D 功能,最终不再犹抱琵琶半遮面了. 那究竟 ...

  2. Python 读取数据

    将一个文件夹下面的图像和对应的pts读进来,然后把pts文件里面的数据读入一个数组,然后画到图像上: # -*- coding:utf- -*- """ 测试数据样例 & ...

  3. Customize WCF Envelope and Namespace Prefix

    转自:http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix Posted on January 8th 2014 by Vana ...

  4. (Hive)史上最难解析的json字符串解析出来了!!

    首先说下解析的数据如下: {"username":"king","actionInfo":{"id":1,"a ...

  5. javascript 完美解决对联广告

    javascript 完美解决对联广告 // function couplet(){ if(arguments.length>=1) this.objID = document.getEleme ...

  6. SpringBoot2 添加应用拦截器

    项目参考:详细参见:<Spring Boot 2精髓:从构建小系统到架构分布式大系统> 第三章 3.6.1节 拦截器 MyWebMvcConfigurer package com.arch ...

  7. C#里的SubString和Convert.ToDateTime

    1.C#里的SubString String.SubString(int   index,int   length) index:开始位置,从0开始 length:你要取的子字符串的长度 2.C#语言 ...

  8. js实例属性和原型属性

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <t ...

  9. loadrunner 性能测试报error-27796的解决

    网上观点: 在注册表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters里,有如下两个键值:TcpTimedWai ...

  10. VIM下的普通模式的相关知识

    什么为一次操作? 从进行插入模式开始,直到返回普通模式为止,在此期间的任何修改都视为一次操作:   使用 u 可以撤销最新的修改: 所以呢,控制好在插入模式的操作就可以控制好撤销命令的粒度: 另外,最 ...