一.前提要了解一下lua 的string几个方法

1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...

2. string库中所有的function都不会直接操作字符串,而是返回一个结果

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表示倒数.

1.string.find(s, pattern, pos) 

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

2.string.gsub(s, pattern, reps)  string.gsub(s, pattern, func)

  第1个参数:源字符串

  第2个参数:待替换之模式串

  第3个参数:替换为reps

  返回 结果串+匹配数

  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)----> l+一个或多个l ,所以替换了 ll  和  l  返回为2

  print(s, n) <== hexxxo worxxxd 2

3.string.gfind

返回一个迭代器,迭代器每执行一次,返回下一个匹配串;

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

4.下面的表列出了Lua支持的所有字符类

.        任意字符
%a        字母
%c        控制字符
%d        数字
%l        小写字母
%p        标点字符
%s        空白符
%u        大写字母
%w        字母和数字
%x        十六进制数字
%z        代表0的字符
上面字符类的大写形式表示小写所代表的集合的补集。例如, '%A'非字母的字符:

模式串中的特殊字符

( ) . % + - * ? [ ^ $

'%' 用作特殊字符的转义字符

'%.' 匹配点;

'%%' 匹配字符 '%'。

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

用'[]'创建字符集

'[%w_]' 匹配字母数字和下划线

'[01]' 匹配二进制数字

'[%[%]]'匹配一对方括号

在'[]'中使用连字符'-'

'%d'    表示 '[0-9]';

'%x'    表示 '[0-9a-fA-F]'

'[0-7]' 表示 '[01234567]'

在'[]'开始处使用 '^' 表示其补集:

'[^0-7]' 匹配任何不是八进制数字的字符;

'[^\n]' 匹配任何非换行符户的字符。

'[^%s]' == '%S'

模式修饰符

  + 匹配前一字符1次或多次

  * 匹配前一字符0次或多次;最长匹配

  - 匹配前一字符0次或多次;最短匹配

  ? 匹配前一字符0次或1次

  ^ 匹配字符串开头

  $ 匹配字符串结尾

参考资料:

https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx

http://blog.csdn.net/liuyukuan/article/details/5489623

http://www.cnblogs.com/light169/archive/2006/10/18/532347.html

在lua的string库和正则表达式的更多相关文章

  1. Lua 之string库

    标准string库 基础字符串函数 string.len(s) 返回一个字符串的长度,例如 string.rep(s, n) 返回一个新的字符串,该字符串是参数s重复n次得到的结果,例如 )) -- ...

  2. lua的string库与强大的模式匹配

    lua原生解释器对字符串的处理能力是十分有限的,强大的字符串操作能力来自于string库.lua的string函数导出在string module中.在lua5.1,同一时候也作为string类型的成 ...

  3. lua的string库

    lua支持的所有字符类 .      任意字符 %a   字母 %c 控制字符 %d 数字 %l         小写字母 %p  标点字符 %s 空白符 %u        大写字母 %w   字母 ...

  4. lua字符串处理(string库用法)

    原文地址http://www.freecls.com/a/2712/f lua的string库是用来处理字符串的,基础函数如下 string.byte(s [, i [, j]]) string.by ...

  5. Lua的string和string库总结

    Lua有7种数据类型,分别是nil.boolean.number.string.table.function.userdata.这里我总结一下Lua的string类型和string库,复习一下,以便加 ...

  6. Lua string库整理

    string库提供了字符串处理的通用函数. 例如字符串查找.子串.模式匹配等. 当在 Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 ). 索引可以是负数,它指从字符串末 ...

  7. lua string 库

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

  8. Lua 中的string库(字符串函数库)总结

    (字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...

  9. Lua string库详解

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

随机推荐

  1. iTOP-4412 开发板镜像的烧写

    镜像就是源代码编译并连接以后生成的可执行文件包,把这些镜像文件烧写到开发板的存储芯片里,开机就可以运行了. 烧写方式有两种,通过TF卡烧写以及使用OTG接口烧写 OTG方式:只能在WIN7 或者XP ...

  2. Entity FrameWork初始化数据库的四种策略

    程序猿就是苦逼,每天还得分出一些时间去写博文.天真的很热,今天就随便写一点啦! 1.EF初始化数据库的四中策略 EF可以根据项目中的模型自动创建数据库.下面我们就分类看看Entity Framewor ...

  3. [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下   数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  4. HDU 4897 Little Devil I(树链剖分)(2014 Multi-University Training Contest 4)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4897 Problem Description There is an old country and ...

  5. ZOJ 2112 Dynamic Rankings(主席树の动态kth)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 The Company Dynamic Rankings ...

  6. jvm排查工具

    jps jps -mvl --查看java的ps进程. jstack 打印一个线程堆栈信息 top -H -p pid1 -> 得到占用资源大的pid2 jstack pid1 | grep & ...

  7. HTML输入框点击内容消失

    在input标签中这样写 type='text' onfocus='if(this.value=='请输入内容以搜索') this.value=''' onblur='if(this.value==' ...

  8. 【RoR win32】新rails运行后0.0.0.0:3000不能访问

    在浏览器中使用127.0.0.1:3000来访问

  9. 解决PHP在IE浏览器下载文件,中文文件名乱码问题

    前提:我们网站所有文件全部使用的是UTF-8 NO BOM的编码方式 1.找测试重现.360浏览器下载的呵呵,果然文件名是乱码.再请测试在ie浏览器下测试.IE9,8,7也全部是乱码.查看编码就是UT ...

  10. HGE引擎之hgeSprite

    一.hgeSprite类 hgeSprite是一个精灵实体的HGE帮助类. 1.构造函数 创建和初始化一个hgeSprite对象. hgeSprite(HTEXTURE tex, float x, f ...