它无法提取子串或者检索字符串的内容。在Lua中真正的字符串操作能力来源于字符串库。 字符串库中的所有函数都导出在模块 string ... ... <看更多>
Search
Search
它无法提取子串或者检索字符串的内容。在Lua中真正的字符串操作能力来源于字符串库。 字符串库中的所有函数都导出在模块 string ... ... <看更多>
Lua 字串 /字元. 字串(String)是由數字、字母、底線组成的一串字元。 Lua 語言中字符串可以使用以下三種方式來表示:. 單引號間的一串字符。 雙引號間的一串字符。
#2. Lua 字符串
Lua 字符串字符串或串(String)是由数字、字母、下划线组成的一串字符。 在Lua 中,字符串是一种基本的数据类型,用于存储文本数据。Lua 中的字符串可以包含任意字符, ...
對lua中string類庫中常用方法總結一二: 1、數字和字串相加減lua自動轉換: 2、#得到字串的長度: 3、string.byte:返回字元的內部數字編碼(ASCII碼) 4、 ...
#4. lua中的常用字符串处理方法原创
对lua中string类库中常用方法总结一二:1、数字和字符串相加减lua自动转换:2、#得到字符串的长度:3、string.byte:返回字符的内部数字编码(ASCII ...
string和utf8函式庫. Lua本身提供string和utf8兩個函式庫可以處理字串。未來有使用到的會在特別說明。
#6. 【30天Lua重拾筆記08】基礎1: 類型-字串 - iT 邦幫忙
string和utf8函式庫. Lua本身提供string和utf8兩個函式庫可以處理字串。未來有使用到的會在特別說明。
#8. [心得] Lua和他快樂的字串函數們... - 看板mud_sanc
腳本語言Lua可用的字串函數,不限於Mushclient才能用。 整理一下比較好查閱,網路上的還是有點散亂。雖然總體來說就三種版本貼來貼去的樣子。
#9. Lua:05---string字串型別:lua字串的使用、字串標準庫
Lua 的字串標準庫提供了很多功能同來處理字串 · 字串標準庫預設處理的是1位元組8bit的字元(數值爲0~255之間)。這對於某些編碼方式(例如ASCII或ISO-8859-1 ...
#10. Lua 字符串 - w3big.com
字符串或串(String)是由數字、字母、下劃線組成的一串字符。 Lua 語言中字符串可以使用以下三種方式來表示:. 單引號間的一串字符。 雙引號間的一串字符。
#11. lua字符串处理(string库用法) - 戴磊笔记
lua 的string库是用来处理字符串的,基础函数如下. string.byte(s [, i [, j]]). string.byte是用来把字符转换成ascii数字,s为目标字符串,i为索引开始位置(从1 ...
#12. lua 字符串处理- sammei
2015年12月7日
#13. Lua 字符串处理
2019年7月18日
#14. 字符串- Lua 教程- UDN开源文档
Lua 支持如下的字符串操作方法:. S.N., 函数及其功能. 1, string.upper(argument):将输入参数全部字符转换为大写并返回 ...
#15. Lua字符串
"String 1" is Lua String 2 is Tutorial String 3 is "Lua Tutorial". 转义字符序列中使用字符串来 ... 现在,让我们深入到几个例子,看这些字符串操作函数的行为。
#16. Lua标准库- 字符串处理(string manipulation)
字符串库为Lua提供简易的字符串处理操作,所有的字串操作都是以1为基数的(C以0),也可使用负向索引,最后一个索引为-1 ; 所有的函数都存放在string表, ...
#17. Lua字符串库(string库)学习笔记 - 脚本之家
Lua 最强大的特性之一就是它的字符串处理能力,它支持字符格式化输出,具有可扩展的模式匹配查找功能,以及一些实用的字符操作,例如查询、截取、替换和 ...
#18. Help:Lua/string - 滚动的天空Wiki
Lua 的string库提供了一系列用于处理字符串的函数。需要注意的是,这些函数都是单字节字符串编码,不能正确地处理Unicode字符,如需对Unicode字符进行操作, ...
#19. Lua 字符串 - 迹忆客
"String 1 is" Lua String 2 is jiyik.com String 3 is "Lua Tutorial". 在字符串中 ... 现在,让我们深入研究几个示例,以准确了解这些字符串操作函数的行为方式。
#20. Lua字符串函数
Lua 字符串函数教程,Lua 中为我们提供了很多字符串处理函数,用于方便快速的处理字符串。
#21. 1.16 字符串库· GitBook
它无法提取子串或者检索字符串的内容。在Lua中真正的字符串操作能力来源于字符串库。 字符串库中的所有函数都导出在模块 string ...
#22. Lua 字符串- Lua中文手册
字符串或串(String)是由数字、字母、下划线组成的一串字符。 Lua 语言中字符串 ... 字符串1 是" Lua 字符串 2 是 dba.cn 字符串 3 是 "Lua 教程" ... 字符串操作. Lua ...
#23. Lua 字符串表示方法
Lua 中操作字符串的方法 · string.upper(argument) · string.lower(argument) · string.gsub(mainString,findString,replaceString,num) · string.find (str, substr, [init, [ ...
#24. Lua连续教程之Lua字符串
Lua 语言处理字符串的完整能力来自其字符串标准库。字符串标准库中的一些函数非常简单:函数string.len(s)返回字符串s的长度,等价于#s ...
#25. Lua中的字符串函數庫 - DSA 原始人村- 痞客邦
记住:Lua中的字串是不變的。string.sub函数以及Lua中其他的字串操作函数都不會改變字串的值,而 是返回一個新的字串。一個常見的錯誤是:
#26. Lua 字符串处理
2021年5月17日
#27. Lua字串和Lua正則
string庫的基本操作. string.lower() 和 string.upper() 改變字串大小寫。 string.rep(str,N) ...
#28. Lua字符串的一些处理 - Rick Chow
2018年6月22日
#29. Lua字符串库(整理)
Lua 的字符串库提供了一组强大的模式匹配函数,如find、match、gsub和gmatch。 1). string.find函数: 在目标字符串中搜索一个模式,如果找到,则返回匹配的起始索引和 ...
#30. Lua字符串
单引号字符串双引号字符串[[和]]之间的字符串上面三种初始化方式的示例如下: 1234567891011string1 = "Lua"print("\"String 1 is\"",string.
#31. Lua - 字符串
下面给出了用于查找子字符串和反转字符串索引的示例代码。 string = "Lua Tutorial" -- replacing strings print(string.find(string, ...
#32. 20.4 转换的技巧(Tricks of the Trade) - Lua程序设计
#33. Lua字符串函数库string - 朱皮特的烂笔头
Lua 中操纵字符串的功能基本来自于string库,字符串库中的一些函数是非常简单的:. Lua字符串操作简单函数. string.reverse(str). 返回一个字符串的倒序排列.
#34. lua string 方法
#35. lua 簡易方法分割字符串
lua 簡易方法分割字符串 ... 方法一: 直接循環,根據索引截取字符串 --[[ str:要分割的字符串dilimiter:分隔符--]] function split(str, ...
#36. lua替换字符串
函数原型string.gsub(s, pat, repl [, n]) 就是global 全局替换子字符串的意思s: 源字符串 pat: 即pattern, 匹配模式repl: replacement, 将pat 匹配到的字串替换 ...
#37. [Lua] 型別與值-Lua 新手村(2)
補充一點,多行註解也可以這樣處理。 number 與string 間的轉換. 一般來說,如果分別有一個數字和字串想要 ...
#38. Lua的字符串操作
操作字符串,大概是比“标准输出”更常用的操作,朴素地讲,写代码就是在处理数字和字符串。 Lua有一个名为 string 的标准库:String Manipulation。
#39. 关于lua字符串的处理
lua处理 字符串. --如果想学习更多的lua字符串模式匹配请参考《Programming in Lua》第二十章String库local str = "abcd efghi jk"local arr = {}for w in ...
#40. Regex之lua篇
2018年12月4日
#41. Lua 学习笔记(六) —— 字符串操作- 躺椅可眷
2015年5月6日
#42. Lua中獲取utf8字串長度的方法和自定義函式- IT閱讀
lua 的string庫不支援處理utf-8編碼的漢字。用lua要處理漢字還是很費勁的。 UTF8的編碼規則:. 1. 字元的第一個位元組範圍 ...
#43. OpenResty實戰-Lua入門-String庫
Lua 字符串庫包含很多強大的字符操作函數。在Lua5.1中,它還將這些函數導出作為string類型的方法。
#44. lua字符串如何处理?
#45. Lua 字符串和Lua 正则
2020年5月2日
#46. lua string库函数
Lua 最强大的特性之一就是它的字符串处理能力,它支持字符格式化输出,具有可扩展的模式匹配查找功能,以及一些实用的字符操作,例如查询、截取、替换 ...
#47. 台達Lua 指令操作手冊
註:需搭配for 迴圈。 string.match. 於字串中尋找模式字串匹配的部. 分,找到匹配的參數後回 ...
#48. Lua 字符串
#49. Lua入门:字符串处理
字符串处理可以说是Lua的核心功能。 Lua作为c语言的补充脚本语言,首先就在字符串方面做了改进。 主要的两个功能是:连字符与String库 -----------
#50. Lua string库_Vue5教程
Lua 解释器对字符串的支持很有限。一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容。在Lua中操纵字符串的功能基本来自 ...
#51. Lua 字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。 Lua 语言中字符 ... 字符串1 是" Lua 字符串2 是w3cschool.cc 字符串3 是"Lua 教程" ... 字符串操作. Lua ...
#52. 对Lua 的string.format 进行转义字符串处理。
对Lua 的string.format 进行转义字符串处理。 2016-7-4 16:15:41. 收藏:0. 阅读:7. 评论:4. 我有一个字符串需要添加一个变量,所以我使用 string.format 方法,但 ...
#53. 详解lua的string与hex数据(十六进制) - LuatOS 文档
#54. Lua 處理UTF-8 字串
最近要用Lua 處理UTF-8 字串,但是Lua 到了5.3 才開始支援UTF-8。 UTF-8 字串長度及複製我的需求很簡單,只要判斷字串長度及類似strncpy …
#55. lua中字符串匹配笔记- kenlistian - IT博客
string.gsub 函数有三个参数:目标串,模式串,替换串。 基本作用是用来查找匹配模式的串,并将使用替换串其替换掉: s = string.gsub("Lua is good", " ...
#56. Lua 数据类型—— 字符串
一、字符串Lua 使用八个比特位来存储字符。(一个字节= 八个比特位) ... string 的有些函数并不适合处理utf8 ,例如这些: reverse , upper , lower , byte , char
#57. Lua 字符串源码解析 - chenxy.me
当一个新的字符串被(尝试)创建时,Lua 会先计算出其哈希值并在 strt 中查找。如果找到了,将直接使用已有的字符串;如果未找到,才会真正创建新的 ...
#58. Lua - 維基百科,自由的百科全書
很多應用程式使用Lua作為自己的嵌入式手稿語言,以此來實現可組態性、可延伸性。 ... 但是其處理表和字串的效率非常之高,加上元表的支援,開發者可以高效的類比出需要 ...
#59. 幫助:Lua - 萌娘百科萬物皆可萌的百科全書
模組是一種進階指令碼處理流程,常備用做各種複雜的函式庫或資料庫,目前 ... string, 字串,使用一對雙引號""、一對單引號''或兩對方括號[[]],Lua中 ...
#60. lua字符串正则表达式的使用_赵克立博客
string.gsub(s, pattern, repl[, n]). 替换字符串函数!这个功能应该是字符串处理中实用性最强的一个。 把字符串中用模式pattern ...
#61. 标准库-Lua编程入门
#62. Lua 5.3 设计实现(三) 长短字符串 - Yuerer's Blog
可以看到字符串内部会记录哈希值,每个字符串被创建出来就不能被改写,因此为了节约内存,Lua会复用相同的字符串,但是逐字节比较太慢了,因此会预处理将 ...
#63. 變數(Variable) 和資料型別(Data Type) - Lua 程式設計 - 開源教學
電腦程式時常需要操作資料(data) 以達成特定功能,我們可以將變數(variable) 視為資料的標籤,Lua 程式透過變數可以存取資料。 以下變數 msg 儲存字串 ...
#64. openresty简记 - Abel's blog
#str是上述函数的语法糖但是提倡使用#的方式,Lua字符串是单独存放长度属性的,使用#可以直接取. 查找字符串. string.find(str,p[, ...
#65. Lua 一些功能 - 遊戲人生人生遊戲
串接字串s1="a"s2="b"s3 = s1 .. s2print("s3:",s3 ) --印出s3 ab ... 如前所述, __tostring函式用於處理當table作為tostring()函式之參數時的行為.
#66. Lua模式匹配 - 乐耶园
模式匹配是进行字符串处理的强大工具之一。虽然通过多次调用函数string.gsub 就可以完成许多复杂的操作,但是还是应该谨慎地使用函数。
#67. 太玄的Lua编程语言课0X3D字符串压缩
前置知识* 0X32模块搜寻正文压缩目的字符串压缩虽然返回值是字符串,但是却不是以ASCII的格式写入的字符串.它是Lua提供的又一种操作底层数据(字节层面) ...
#68. 详解lua的string与hex数据(十六进制) - 文章
本文希望阐述的问题. 在lua中处理string 与hex(十六进制数) 的思维转换. 背景. luat在处理通信的时候,总会设计到数据处理,例如:.
#69. byte[]类型在Lua中的使用注意事项 - 白泽图
首先Lua中不存在byte[]类型,但又不属于userdata,所有的byte[]在lua中的 ... 是处理的二进制数据,也就是说虽然byte[]数据在lua中显示类型为string, ...
#70. Lua 中怎样将string类型转换为byte数组? - Cocos中文社区
用string.byte、string.sub、string.format、table组合处理吧,怎么组合处理要看你具体需求了。 如果处理的量较大,建议在c/c++层封装下,lua里这样 ...
#71. 小狐狸事務所: Lua 學習筆記(一) : 基本語法
... 非常適合用來處理C 不擅長的部分(例如陣列與字串), 在過去早已廣泛被各類線上遊戲採用為腳本語言, 我認為低價的NodeMCU 平台的出現, 會使Lua 在物 ...
#72. 构建Lua解释器Part3:String设计与实现
从lua-5.2.1开始,字符串就分为长字符串和短字符串了[1],其中短字符串会进行充分的hash运算,并且进行内部化处理,借以提高lua虚拟机对字符串操作的 ...
#73. Lua中字符替换函数string.gsub对特殊字符如$[]等的替换
2017年11月20日
#74. lua 源码阅读(二) - 仓
读完风云关于lua 的字符串部分,对lua 的字符串处理也有相应的理解。 Contents. String. lua 的字符串在lua 内部分为长字符串和短字符串,而这两种 ...
#75. Lua - 小马的笔记
Lua 3. 目录. 面向对象; metatable; 表table; 数组; 字符串string ... 在Lua 中,可以通过使用冒号操作符来隐藏self 参数的声明,冒号的效果相当于在 ...
#76. Lua笔记效率&性能 - Aillieo Collection
string.format 更适合去处理较为复杂的带格式的字符串处理。 对于字符串的反复拼接,使用 table.concat 会更高效。每次调用 .. 都会产生内存 ...
#77. Lua 學習筆記(一) : 基本語法- 感知層技術
... 非常適合用來處理C 不擅長的部分(例如陣列與字串), 在過去早已廣泛被各類線上遊戲採用為腳本語言, 我認為低價的NodeMCU 平台的出現, 會使Lua 在物 ...
#78. 【Rust 日报】2023-09-10 基于Hyper和Rust的HTTP Server
这是一个纯Rust 编写的Lua 解释器和运行时,它接收一个Lua 字符串,将其编译为字节码,并运行到完成,返回一个可以轻松解包成本地类型的Value 对象。该 ...
#79. 16进制到文本字符串的转换
您最近使用了:. 16进制到文本字符串. JSON工具; 编码/加密; 格式化; 网络; 前端; 后端; 转换; 其他; 文档; 图片处理; 文字处理; 数学; 站长工具; 颜色; 平台工具 ...
#80. Nlohmann json nested
The cool thing about it is that you can write a serializer for your own data format, be it JSON, Lua or anything else. The only caveat is that it is ...
#81. 【東北亞日本|航空運輸輔助】職缺- 2023年9月熱門工作機會
受理客戶與合作方對相關業務的咨詢及問題處理2. 運用溝通能力技巧解決客戶 ... Cocos lua開發工程師 ... 具備RESTful API 串接經驗或運用Ajax 串接第三方API經驗5.
#82. Configuring NGINX and NGINX Plus as a Web Server
#83. Unix时间戳转换
Lua, os.time() .NET/C#, DateTimeOffset.UtcNow.ToUnixTimeSeconds();. Dart, (new DateTime.now().millisecondsSinceEpoch / 1000).truncate() ...
#84. Pandoc User's Guide
#85. Nginx Map Regex
We use Nginx's map {. capture_multi now return a lua table with the boolean ... 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项 # 有两种配置 ...
lua 字串 處理 在 [心得] Lua和他快樂的字串函數們... - 看板mud_sanc 的推薦與評價
腳本語言Lua可用的字串函數,不限於Mushclient才能用。
整理一下比較好查閱,網路上的還是有點散亂。雖然總體來說
就三種版本貼來貼去的樣子。
目 錄
┌──────────┬─────────┬─────────────┐
│ 行 名稱 │ 行 名稱 │ 行 名稱 │
├──────────┼─────────┼─────────────┤
│ 19 string.len │ 46 string.rep │ 57 string.lower │
│ 69 string.upper │ 81 string.sub │110 string.byte │
│144 string.char │176 string.dump │182 string.find │
│217 string.match │250 Lua 的匹配字元│318 string.gsub │
│354 string.gmatch │378 string.format │422 string.reverse │
└──────────┴─────────┴─────────────┘
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
string.len(s):
功能:返回字串s的長度。
說明:計算一段字串的長度,包含不可見的控制字元。一般送到 Mushclient 畫面的內容是
已經被Mushclient解析過的文字,控制字元被解析後移除了, 所以不會算到換
行及色碼,
範例:a = string.len('你好嗎?')
print (a)
結果會是7。
b,a = '你好嗎?',string.len(b)
print (a)
如果先把字串寫入b,再代入string.len去計算長度,就不需在b兩側加上''(""也可
以,在lua兩者用途相同);如果加上了,b會被視為一個字串, 而非變數,就會
得到值為1。。
如果使用Mushclient 的 trigger,假設匹配的字串:
^(你好嗎?)$
執行的內容為:
print (string.len("%1"))
將得到值為7,%1的兩側就必須加上""。
string.rep(s, n)
功能:返回重複n次s的字串。
說明:把字串內容複製n遍,在有需要重複內容輸出,但要重複幾次不確定的時候,可能會
用到。
範例:a= string.rep(' ',5)
print (a)
重複半形空格五次後顯示。
string.lower(s)
功能:將s中的大寫字母轉換成小寫。
說明:用途很單純,而且只有英文字母才用得到。已經是小寫的就不會被轉換。因為Lua會
將大小寫有差異的兩者視為不同的字串或變數,所以還是有用得到的地方。
範例:a,b= 'anD','and'
print (a..' = '..b..'?',a == b)
print (string.lower(a)..' = '..b..'?',string.lower(a) == b)
可以看出差異所在。
string.upper(s)
功能:將s中的小寫字母轉換成大寫。
說明:用途很單純,而且只有英文字母才用得到。已經是大寫的就不會被轉換。因為Lua會
將大小寫有差異的兩者視為不同的字串或變數,所以還是有用得到的地方。
範例:a,b= 'and','and'
print (a..' = '..b..'?',a == b)
print (string.upper(a)..' = '..b..'?',string.lower(a) == b)
可以看出差異所在。
string.sub(s,i,j):
功能:函數擷取字串s的從第i個字元到第j個字元之間的字串。
說明:這個函數用法就比較多元了-
i為正數時,從開頭起算;負數則從結尾倒算回去。
j為正數時,意為取到第j個字元,負數時,就是從結尾開始數回去第j個字元。可以
不加,不加的時候,預設值為-1,即取到最後。
有設i才能設j。
範例:a = 'abcdefghijk'
print (string.sub(a,1))
>從第一個字元開始擷取,得:abcdefghijk
print (string.sub(a,2))
>從第二個字元開始擷取,得:bcdefghijk
print (string.sub(a,-1))
>從結尾開始擷取一個字元,得:k
print (string.sub(a,2,-1))
>從第二個字元起擷取,得:bcdefghijk
print (string.sub(a,2,-2))
>擷取第二個字元到倒數第二個字元,得:bcdefghij
print (string.sub(a,-5,-2))
>擷取倒數第五個字元到倒數第二個字元,得:ghij
string.byte(s,i,j)
功能:回傳從i到j的字元所對應的數值(ASCII值)。
說明:i預設為1,j預設為i的值。
中文字也可以得到相對的值。
範例:words = 'abcd123測試中!!'
print (string.byte(words,3))
回傳變數words裡第3個字元"c"的ASCII值:99
print (string.byte(words,3,4))
回傳變數words裡第3到4個字元"cd"的ASCII值:99 100
print (words:byte(2,5))
回傳變數words裡第2到5個字元"bcd1"的ASCII值:98 99 100 49
這個語法等同於print (string.byte(words,2,5)),冒號在Lua裡可以把右邊的值傳
遞給左邊的函數;類似的寫法可以在Mushclient的抓聊天訊息到新視窗的Plugin裡看
到。
a,b,c = words:byte(2,3)
print (a,b,c)
回傳變數words裡第2到3個字元"bc"的ASCII值:98 99 nil
這裡先把得到的值傳到a,b,c裡,再用print去顯示。當函數回傳的值不只一個,但希
望只得到其中一個值,可以這麼寫。但一般會如此寫:
_,b,_ = words:byte(2,3)
把不需要的值傳回變數_。
如果設定的變數名超過回傳的值數目,沒賦值的變數會顯示nil;反之,多餘的回傳值
會被捨棄。
print (string.byte(words,8,9))
回傳變數words裡第8到9個字元"測"的ASCII值:180 250
'測'是由兩個字元組成的,所以要設頭尾以得到兩個值。
string.char(...)
功能:回傳ASCII值所對應的字元(串)。
說明:把ASCII 碼轉變回對應字元的函數,有兩種輸入方式-10位元,直接輸入對應
數字;16位元,在數字前加上0x,表示為16位元。使用者數字使用習慣從1開始
不同,電腦從0開始。所以10位元的序列為:
0,1,2,3,4,5,6,7,8,9
16位元則是:
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
範例:#Send ('say '..string.char(0x1b).."[36mtest")
在輸出指令say test,並將test改成青色。
string.char(0x1b)輸出控制字元Esc,好讓伺服器端
能判讀內容帶有色碼。結果為:
齊格飛(HMML8:劍士)說道:test
print (string.byte('一',1,2))
回傳'一'的ASCII值:164 64
'一'在吃字榜上很有名氣,現在看一看這兩個字元分別對應什麼字,從值
的大小來看,應是第二個有問題:
print (string.char(164))
得值: ,這個字元不在PcMan的支援下,所以無法顯示。
print (string.char(64))
得值:@,剛好是zMUD的表意字元(Mushclient也是)
要組回去,可以用','分隔開一一列舉:
print (string.char(164,64))
要輸入一連串的值,如上所列般加逗號連接下去即可。
string.dump(function)
功能:返回指定函數的二進位代碼(函數必須是一個Lua函數,並且沒有上值)。
說明:這個不知道怎麼用。
string.find(s, pattern [, init [, plain]])
功能:尋找s中首次出現pattern的位置,如果找到則回傳首次出現的起始和結束位置,否則
返回nil
說明:這個函數有四個參數可用:
s:母體。
pattern:目標字串。
init:搜尋起始位置(數字,可用負值)。可加可不加。
palin:搜尋模式(true|false),開關簡單匹配模式。可加可不加,預設為簡單匹
配模式。
範例:a = '你的身上(wealth)帶有 6667570 影特幣,銀行存款(balance)有 63908926 影
特幣。'
print (string.find(a,'影特幣'))
得到:30 35,第一個值是起始位置,第二個值是結束位置。只有抓到第一個'影特幣
。如果要抓全部可以增加第三個參數,用迴圈執行:
for i = 1,10 do
i,j = string.find(a,'%d+ ',-j)
print(i,j)
if i == nil then break end
end
基本上,這個應該是用while...do...end 或repeat...until,不過,這對初學者而
言(就是我),太危險了,不如用能控制次數的for...end安全。先設一個差不多的
次數,這裡是設10次,不管寫對還是寫錯,10就會結束,至少不會死當。把起始值
傳給i,結束值傳給j,再把j設到string.find的第三個參數,下次就會從上次的結束
尋找位置開始找。這次就不管一樣的,改找數字,搜尋條件可以使用也表達式,不過
轉義字元不是'\',而是'%'。為了不做白工,所以加個判斷,找完之後就自行跳出迴
圈。結果如下:
第一組數字起始位置:22,結束位置:29。
第二組數字起始位置:58,結束位置:66。
"nil nil"代表己經找到最後了。
string.match(s,pattern[, init ])
功能:回傳目標字串中和模式字串匹配的部分。
說明:也就是從s中,找出和pattern條件相符的部份並回傳,和string.find一樣,它只會
匹配一次,找到一個就會停止動作,但可以選擇開始匹配的位置,只要在末尾在加上
一個參數即可。這個函數的重點在於表示式匹配,畢竟一模一樣的字串被匹配出來回
傳,並沒什麼意義。所以主要是用在找相同格式的字串。
範例:a = '你的身上(wealth)帶有 6667570 影特幣,銀行存款(balance)有63908926 影特
幣。'
print (string.find(a,'影特幣%S%S'))
找出前綴'影特幣',後面兩個字元長度的非空白字串相匹配的字串,得到第一個值:
影特幣,
print (string.match(a,'影特幣%S%S',38))
找出前綴'影特幣',後面兩個字元長度的非空白字串相匹配的字串,但是從第38個字
元找起,得到第二個值:影特幣。
實際上應該是找金額比較實用,透過匹配條件的設定,可以一次找兩個:
print (string.match(a,'(%d+) %S+ (%d+)'))
匹配前後都是數字組的字串,用()可以單獨取出需要的部份,得到值:
6667570 63908926
如果想指定取某個值,同樣:
i,j = string.match(a,'(%d+) %S+ (%d+)')
或
i,j = a:match('(%d+) %S+ (%d+)')
皆可。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Lua 的匹配字元
┌─┬─────────────────────────────────┐
│. │ 所有字符 │
│%a│ 字母,包含大小寫。 │
│%c│ 控制字符,如:ESC、換行等不可視字元大多都是。 │
│%d│ 數字,0-9,以外的都不是。 │
│%l│ 小寫字母,大寫字母和非字母都不算。但是%L並不等於%u。 │
│%p│ 標點符號,只有算單字元的那些,雙字元的都不算。 │
│%s│ 空白字符。這個還蠻常用的,對非英語語系來說。 │
│%u│ 大寫字母,小寫字母和非字母都不算。但是%U並不等於%l。 │
│%w│ 字母和數字字符。 │
│%x│ 十六進制數字。就當做是0-9加上a-f的集合。 │
│%z│ 內部表示為0的字符,這個不知何時用到。 │
└─┴─────────────────────────────────┘
以上這些都可以單獨使用,去做匹配,除了第一個外,將其它的匹配字元小寫改成大寫,就
會將功能反轉,如:%a 代表所有字母;而%A就是非字母。%c是匹配所有控制字元,%C就是
所有非控制字元。
另外,還有一些加強匹配效果的字元,有點主詞+形容詞的味道:
( ) % + - * ? [ ] ^ $
():用來補獲符合條件的字串內容,如果要將它做為匹配的條件之一,請在前方加上%。
%:轉義字元,用來告訴程式後面的字元,是字串的一部份,還是匹配用的字元,但本身就
是特殊用途的字元,加上它,就變成一般的字元。如果需要匹配%,為了讓它變一般的字
元,在前方加上%。如有一個字串'100%',要寫出符合條件的表達式,像這樣:
%d+%,因為末尾的%尚未被轉義,會視為跟第一個%相同作用,造成表達式本身錯誤,正
確要這麼寫%d+%%。
+:它是一種後綴字元,用來設定匹配字元的長度條件,表示這個匹配字元有多長,+代表1
個或更多,如%d+,代表這組數字至少為一位數,它匹配:"12","0","324567546"...等
。
-:同上,但條件為0或更多,跟*不同的地方是-為最少匹配,*為最多匹配。如:
print(string.match(1234567890,"(%d+)(%d+)"))
前方的%d+會取到能讓表達式匹配成功的極限,得結果:123456789和0
print(string.match(1234567890,"(%d-)(%d+)"))
前方的%d-即使不取值,也能匹配,將所有數值都讓給%d+,得:""和1234567890
""不代表它匹配失敗,它有取到值,不是nil
print(string.match(1234567890,"(%d*)(%d+)"))
前方的%d*會取到能讓表達式匹配成功的極限,得結果:123456789和0
*:同上,但條件為0或更多,其它前一條講完了。
?:條件是0或1個。模式是最大匹配,跟*相同,只是當?佔先手時,最也多取一位數,*佔先
手時,會取到讓後手滿足匹配的最底限為止。
[]:是一個集合,你可以把你要匹配的內容放進去,但要記住,它匹配的長度依然是一個字
元,要設定匹配的長度,請加"*","+","-","?",如:
[0-9]:匹配數字,相等於%d
[0-9a-z]:匹配數字和英文字母小寫。
[-a-z]:匹配"-"和英文字母小寫。
[%d%a]:匹配英數字,等同%w。
[%d\n]:匹配數字和換行。
^:前綴,為匹配字元加上開頭限定的條件。但如在[]裡的開頭,就變成反集合。如:
[\n]匹配換行字元,[^\n]匹配換行字元以外的字元。
$:後綴,為匹配字元加上末尾限定的條件,但要注意看不到的字元,如'\n','\r'可能會影
響結果。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
string.gsub(s,pattern,repl [, n])
功能:將目標字串中和模式字串匹配的部分全部取代後回傳。
說明:有四個參數:
s:母體
pattern:匹配條件
repl:新的內容
n:取代次數。
它會回傳兩個值,一個是取代後的結果,一個是取代次數。
同樣支援表達式匹配。
範例:a = '你的身上(wealth)帶有 6667570 影特幣,銀行存款(balance)有63908926 影特
幣。'
i,j = string.gsub(a,'%d+ %S%S%S%S%S%S','30塊新台幣')
print (i)
print ('替換次數:'..j)
得結果:
你的身上(wealth)帶有 30塊新台幣,銀行存款(balance)有30塊新台幣。
替換次數:2
i,j = string.gsub(a,'%d+ %S%S%S%S%S%S','30塊新台幣')
print (i)
print ('替換次數:'..j)
得結果:'
你的身上(wealth)帶有 30塊新台幣,銀行存款(balance)有63908926 影特幣。
替換次數:1
print(string.gsub("hello Lua","(.)(.)","%2%1"))
將相鄰的兩個字符對調,輸出為ehll ouLa
這個是在別旳地方看來的,不過以MushClient的別名輸出,結果不太一樣,但在命令
列輸出是正確的。
print(string.gsub("hello Lua!","%a","%0-%0"))
輸出為h-he-el-ll-lo-o L-Lu-ua-a!
string.gmatch (s, pattern)
功能:回傳所有目標字串中和模式字串匹配的部分。
說明:和string.sub/gsub不同(功能截然不同),加上g,基本功能也是一樣,不過
string.gmatch會尋找匹配部份,從頭找到尾,它只有兩個參數,直接用print輸出,
只會得到一個table表的ID值。必須用迴圈才會取出內容。
範例:s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
print(w)
end
找出所有單字並輸出。如果gmatch的迴圈老是寫失敗,找不到問題,直接用上例,這
個Lua說明手冊的範例去修改。網路上有幾個例子的教學,不過在Mushclient都無法
執行,這個是目前找到成功的。
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k] = v
end
把指定格式的字串取出,寫到一個表中。因為匹配的捕獲有兩個,所以迴圈的變數增
加為兩個。
string.format (formatstring, ···)
功能:將字串格式化後再回傳。
說明:這個相對其它字串函數,使用方式比較複雜,建議是一邊改一邊輸出檢查結果。它有
兩個參數:
formatstring:顯示的格式。
string:字串內容。
設定格式的轉義碼也是用%,要注意大小寫,內容有:
┌───┬─────────────────────────────────┐
│%c │接受一個數字,並將其轉化為ASCII碼表中對應的字元 │
│%d,%i │接受一個數字並將其轉化為有符號的整數格式,如果數字是為16進位的格 │
│ │式(如0xf),會被轉成10進位的數字,但起始值是以0起算的。 │
│%o │接受一個數字並將其轉化為八進制數格式 │
│%u │接受一個數字並將其轉化為無符號整數格式 │
│%x │接受一個數字並將其轉化為十六進制數格式, 使用小寫字母 │
│%X │接受一個數字並將其轉化為十六進制數格式, 使用大寫字母 │
│%e │接受一個數字並將其轉化為科學記數法格式, 使用小寫字母e │
│%E │接受一個數字並將其轉化為科學記數法格式, 使用大寫字母E │
│%f │接受一個數字並將其轉化為浮點數格式 │
│%g(%G)│接受一個數字並將其轉化為%e(%E, 對應%G)及%f中較短的一種格式 │
│%q │接受一個字符串並將其轉化為可安全被Lua編譯器讀入的格式 │
│%s │接受一個字符串並按照給定的參數格式化該字符串 │
└───┴─────────────────────────────────┘
在%和匹配字元中間,依規則增加格式化的條件:
%[+-(一般是靠左或靠右)][補位字元,幾乎只能用0][總寬度].[取幾個位元][字符]
如:%+06.3s << 靠右,總寬度6位,目標字串只取3個字元長度。在%和s外面則被視
為普通字串。
範例:string.format("%%c: %c", 83) 輸出S
string.format("%+d", 17.0) 輸出+17
string.format("%05d", 17) 輸出00017
string.format("%o", 17) 輸出21
string.format("%u", 3.14) 輸出3
string.format("%x", 13) 輸出d
string.format("%X", 13) 輸出D
string.format("%e", 1000) 輸出1.000000e+03
string.format("%E", 1000) 輸出1.000000E+03
string.format("%6.3f", 13) 輸出13.000
string.format("%q", "One\nTwo") 輸出"One
Two"
string.format("%s", "monkey") 輸出monkey
string.format("%10s", "monkey") 輸出 monkey
string.format("%5.3s", "monkey") 輸出 mon
string.reverse (s)
功能:將字串的排列順序倒過來並輸出。
說明:如上。
範例:免了。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.196.45
※ 編輯: hmml 來自: 220.132.196.45 (06/16 03:13)
※ 編輯: hmml 來自: 220.132.196.45 (06/16 13:03)
... <看更多>