高速掌握Lua 5.3 —— 字符串库 (2)
Q:模式匹配字符串的相關函數?
A:
--[[ string.find(s, pattern [, init [, plain]])在字符串"s"中查找第一個與匹配模式"pattern"相匹配的子串,函數返回子串的開始位置和終止位置。假設未找到返回"nil"。假設在"pattern"中定義了捕獲,捕獲物也會在之后依次返回。"init"可指定從字符串"s"的什么位置開始查找,默覺得1。
"plain"指定是否以模式匹配的形式查找子串,假設"plain"為0, 那么將依據"pattern"的字面意思查找子串。默覺得非0值。]] s = "Hello World! 123 %a+" print(string.find(s, "l")) --> 3 3 print(string.find(s, "l", 6)) --> 10 10 print(string.find(s, "lll", 6)) --> nil print(string.find(s, "%a+", 6)) --> 7 11 print(string.find(s, "%a+", 6, 0)) --> 18 20 -- 通過使用第三個參數能夠實現查找字符串中全部匹配"pattern"的子串。 local b = 0 local e = 0 while true do -- 從匹配位置的下一個位置開始繼續查找。 b, e = string.find(s, "%a+", e + 1) if b == nil then break end io.write(string.format("%s, ", string.sub(s, b, e))) --> Hello, World, a, end print() --[[ string.gsub(s, pattern, repl [, n]) 將字符串"s"中前"n"個與匹配模式"pattern"相匹配的子串替換為"repl", "n"假設不指定,默認替換全部的匹配。 函數返回被替換后的字符串。以及替換的次數。 1、假設"repl"是一個字符串(當中能夠使用捕獲物),那么把這個字符串作為替換品。 特例,"%0"代表整個匹配。 2、假設"repl"是一個"table",每次匹配時都會用第一個捕獲物作為鍵去查這張表。 假設"repl"是一個函數,則在每次匹配時都會以全部捕獲物作為參數調用這個函數。 3、假設"pattern"中沒有設定捕獲。則默認捕獲整個"pattern"。 4、假設"table"的查詢結果或者函數的返回結果是一個字符串或是個數字時, 都將其作為替換品。而結果為"false"或"nil"時不作替換(即保留匹配前的原始串)。]] print(string.gsub("Lua is cute", "cute", "great")) --> Lua is great 1 print(string.gsub("all lii", "l", "x")) --> axx xii 3 print(string.gsub("Lua is great", "perl", "tcl")) --> Lua is great 0 print(string.gsub("hello world", "(%w+)", "%1 %1")) --> hello hello world world 2 print(string.gsub("hello world", "%w+", "%0 %0", 1)) --> hello hello world 1 print(string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")) --> world hello Lua from 2 print(string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)) --> home = /home/roberto, user = roberto
posted @ 2017-08-07 14:14 llguanli 閱讀(...) 評論(...) 編輯 收藏總結
以上是生活随笔為你收集整理的高速掌握Lua 5.3 —— 字符串库 (2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在公司的局域网内,组长让你在自己的虚拟机
- 下一篇: 如何在Linux中恢复一个删除了的文件