• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua字符串模式匹配函数小结

Lua字符串模式匹配函数小结

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua 字符串,lua字符串分割,lua 字符串截取,lua 字符串转换数字,lua 字符串拼接等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

模式匹配函数

在string库中功能最强大的函数是:
string.find(字符串查找)
string.gsub(全局字符串替换)
string.gfind(全局字符串查找)
string.gmatch(返回查找到字符串的迭代器)
</div>
这些函数都是基于模式匹配的。与其他脚本语言不同的是,Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配。主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lua标准库加在一起都大。权衡之下,Lua中的模式匹配的实现只用了500行代码,当然这意味着不可能实现POSIX所规范的所有更能。然而,Lua中的模式匹配功能是很强大的,并且包含了一些使用标准POSIX模式匹配不容易实现的功能。

string.gmatch(str, pattern)     

这是一个返回迭代器的函数. 实际的用例如下:
s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
 print(w)
end
</div>
这里是一个捕获并将配对字符分别存到不同变量的例子:
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
 t[k]=v
end
for k, v in pairs(t) do
 print(k, v)
end
</div>

string.gsub(str, pattern, repl, n)

string.gsub()函数根据给定的配对表达式对源字符串str进行配对, 同时返回源字符串的一个副本, 该副本中成功配对的所有子字符串都将被替换. 函数还将返回成功配对的次数.实际的替换行为由repl参数的类型决定:

当repl为字符串时, 所有成功配对的子字符串均会被替换成指定的repl字串.

当repl为table时, 对每个成功配对的子字符串, 函数均会试图寻找以其为key值的table中的元素, 并返回该元素. 如果该配对包含任何捕获信息, 则以编号为1号的捕获作为key值进行查找.

当repl为函数时, 每个成功配对的子字符串均会作为参数被传入到该函数中去.

在repl是table或函数时, 如果该table或函数返回了字串或数字的值, 这个值依然会被用于替换副本字串中的配对子字串. 如果该table/函数返回的值为空, 将不发生替换.

n参数可选, 当它被指定时, string.gsub()函数只对源字符串中的前n个成功配对的成员进行操作.

以下是几个例子:

> print(string.gsub("hello world", "(%w+)", "%1 %1"))
hello hello world world 2

> print(string.gsub("hello Lua", "(%w+)%s*(%w+)", "%2 %1"))
Lua hello 1

> string.gsub("hello world", "%w+", print)
hello world 2

> lookupTable = {["hello"] = "hola", ["world"] = "mundo"}
> print(string.gsub("hello world", "(%w+)", lookupTable))
hola mundo 2
</div>

string.match(str, pattern, init)

string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1.

在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil.

string.match("abcdaef", "a")
-> a
</div>

string.reverse(str)

返回一个字符串的倒序排列

string.reverse("abcde")
->edcba
</div>

string.dump(function)

返回指定函数的二进制代码(函数必须是一个Lua函数,并且没有上值)

string.find(str, pattern, init, plain)

string.find的基本应用就是用来在目标串(subject string)内搜索匹配指定的模式的串。函数如果找到匹配的串返回他的位置,否则返回nil.最简单的模式就是一个单词,仅仅匹配单词本身。比如,模式'hello'仅仅匹配目标串中的"hello"。当查找到模式的时候,函数返回两个值:匹配串开始索引和结束索引。

s = "hello world"
string.find(s, "hello")    --> 1    5
string.find(s, "world")    --> 7    11
string.find(s, "l")        --> 3    3
string.find(s, "lll")      --> nil
</div>

string.find函数第三个参数是可选的:标示目标串中搜索的起始位置。当我们想查找目标串中所有匹配的子串的时候,这个选项非常有用。我们可以不断的循环搜索,每一次从前一次匹配的结束位置开始。下面看一个例子,下面的代码用一个字符串中所有的新行构造一个表:

local t = {}      -- 存放回车符的位置
local i = 0
while true do
    i = string.find(s, "\n", i+1)  -- 查找下一行
    if i == nil then break end
    table.insert(t, i)
end
</div>

string.sub(str,sPos,ePos)

string.gsub的功能是截取字符串,他从指定起始位置截取一个字符串。string.sub可以利用string.find返回的值截取匹配的子串。
对简单模式而言,匹配的就是其本身

s = "hello world"
local i, j = string.find(s, "hello")    --> 1    5
string.sub(s, i, j)        --> hello
</div>

string.gsub(str, sourcestr, desstr)

string.gsub的基本作用是用来查找匹配模式的串,并将使用替换串其替换掉:

string.gsub函数有三个参数:目标串,模式串,替换串。

s = string.gsub("Lua is cute", "cute", "great")
print(s)      --> Lua is great
s = string.gsub("all lii", "l", "x")
print(s)      --> axx xii
s = string.gsub("Lua is great", "perl", "tcl")
print(s)      --> Lua is great
</div>

第四个参数是可选的,用来限制替换的范围:

s = string.gsub("all lii", "l", "x", 1)
print(s)     &nb

您可能想查找下面的文章:

  • 简单的Lua 连接操作mysql数据库的方法
  • Lua编程示例(五): C语言对Lua表的读取和添加
  • Lua编程示例(四):Lua标准库之表库、字符串库、系统库
  • 浅析Lua编程中的异常处理
  • Lua中操作字符串的基本方法整理
  • Lua中的函数相关知识点整理汇总
  • Lua在各个操作系统中的开发环境配置教程
  • Lua中计算、执行字符串中Lua代码的方法
  • Lua教程(十五):输入输出库(I/O库)
  • Lua判断字符串前缀是否为指定字符的3种方法

相关文章

  • Lua中的控制结构(流程控制)简明总结
  • Lua中的函数代码实例
  • Lua教程(八):数据持久化
  • Lua教程(十五):输入输出库(I/O库)
  • Lua的协程(coroutine)简介
  • Lua中获取utf8字符串长度的方法和自定义函数
  • C语言模块回调Lua函数的两种方法
  • Lua脚本语言入门笔记
  • Lua编程中使用嵌套循环的使用教程
  • Lua变量类型简明总结

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 编写高性能Lua代码的方法
    • 深入解读Lua中迭代器与泛型for的使用
    • Lua中的变量和流控制入门学习
    • Lua内置的调试器用法详解
    • Lua中的逻辑运算符使用详解
    • Lua脚本获取喜马拉雅MP3音频地址
    • Lua中使用模块的一些基础知识
    • Lua在各个操作系统中的开发环境配置教程
    • Lua中编译执行代码相关的函数详解
    • Lua教程(三):表达式和语句

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有