Lua學習之string.gmatch

這是Lua的string庫比較高級一點的匹配方法了。

原型:string.gmatch (s, pattern)

解釋:返回一個迭代器函數,每一次調用這個函數,返回一個在字符串 找到的下一個符合 pattern 描述的子串。如果參數 pattern 描述的字符串沒有找到,迭代函數返回 nil

匹配的模式:

.(點): 與任何字符配對 
%a: 與任何字母配對 
%c: 與任何控制符配對(例如\n) 
%d: 與任何數字配對 
%l: 與任何小寫字母配對 
%p: 與任何標點(punctuation)配對 
%s: 與空白字符配對 
%u: 與任何大寫字母配對 
%w: 與任何字母/數字配對 
%x: 與任何十六進制數配對 
%z: 與任何代表0的字符配對 
%x(此處x是非字母非數字字符): 與字符x配對. 主要用來處理表達式中有功能的字符(^$()%.[]*+-?)的配對問題, 例如%%與%配對 
[數個字符類]: 與任何[]中包含的字符類配對. 例如[%w_]與任何字母/數字, 或下劃線符號(_)配對 
當上述的字符類用大寫書寫時, 表示與非此字符類的任何字符配對. 例如, %S表示與任何非空白字符配對.例如,’%A’非字母的字符

‘%’ 用作特殊字符的轉義字符,因此 ‘%.’ 匹配點;’%%’ 匹配字符 ‘%’。轉義字符 ‘%’不僅可以用來轉義特殊字符,還可以用於所有的非字母的字符。當對一個字符有疑問的時候,爲安全起見請使用轉義字符轉義他。

+ 匹配前一字符1次或多次 
* 匹配前一字符0次或多次 
- 匹配前一字符0次或多次 
? 匹配前一字符0次或1次


下面是它的使用了~

local str = "123sd456,ff,45"

local str1 = string.gmatch(str, "%d+")    -- 查找目標字符串中的數字

print(str1())    -- 123
print(str1())    -- 456
print(str1())    -- 45

-- 使用循環來打印
local str3 = "hello world from Lua"
local index = 1

for word in string.gmatch(str3, "%a+") do    -- 查找目標字符串中的任何字母相匹配
    print(index, word)
    index = index + 1
end

-- 輸出
-- 1, hello
-- 2, world
-- 3, from
-- 4, Lua

-- 查找屬性樹

local str4 = "hello=world, aaa=bbb, from=Lua"
for k, v in string.gmatch(str4, "(%w+)=(%w+)" do
    print(k, v)
end

-- 輸出
-- hello world
-- aaa bbb
-- from Lua

-- 當沒有匹配到時,返回nil


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章