Lua程式設計(十五)

2021-09-02 23:45:18 字數 1320 閱讀 5668

修飾符?用於匹配乙個可選的字元,比如可以使用『[±]?%d+』來尋找乙個可能帶有符號的整數,像「-12」,「24」,「+123」等等。

lua語言中的修飾符只能作用於乙個字元模式,無法作用於一組分類。

以補字元^開頭的模式表示從目標字串的開頭開始匹配,而以$結尾的模式表示匹配到目標字串的結尾。^和¥只有在作用於模式的開頭和結尾時才具有特殊含義。

模式'%b'匹配成對的字串,它的寫法是'%bxy',其中x作為起始字元,y作為結束字元。

s = "a (enclosed (in) parentheses) line"

print((string.gsub(s, "%b()", ""))) -- > a line

最後模式'%f[char-set]『代表前置模式。該模式只有在後乙個字元位於char-set內而前乙個字元不在時匹配乙個空字串。

s = "the anthem is the theme"

print((string.gsub(s, "%f[%w]the%f[%w]", one))) --> one anthem is one theme.

上例中'%f[%w]』會匹配後乙個字元時數字和字母而前乙個字元不是數字和字母的情況, 『%f[%w]』則匹配後乙個字元不是字母和數字而前乙個字元是字母和數字的情況,在字串中只能匹配完整地「the」字串。

前置模式中把目標字串中第乙個字元和最後乙個字元的位置當成空字元。所以在上例中,第乙個"the"在不屬於集合[w]的空字元和符合集合'[%w]的t之前匹配了乙個前置。

lua中的捕獲機制可以根據乙個模式從目標字串中抽出與該模式匹配的內容進行後續操作。模式中需要捕獲的部分可以放在一對圓括號中來指定進行捕獲。對於具有捕獲的模式(圓括號中有指定捕獲內容),函式string.match會將所有捕獲到的值作為單獨的結果返回;

pair = "name = anna"

key, value = string.match(pair, "(%a+)%s = %s*(%a+)")

print(key, value) --> name anna

在模式中形如'%n'的分類(n是乙個數字),表示匹配到的第n個捕獲的副本。

s = [[then he said: "it's all right"!]]

q, quotedpart = string.match(s, "([\"'](.-)%1")

print(quotedpart) --> it's all right

print (q) --> "

第乙個捕獲是引號本身,第二個捕獲是引號中的內容。

Lua程式設計 七十五)

反射的另外乙個常見的用法是用以調優,即程式使用資源的分析。對於事件相關的調優,最好使用c介面,因為每次呼叫鉤子函式開銷太大從而可能導致測試結果無效。效能調優工具的主要資料結構是兩個表,其中乙個表將函式和它們的呼叫計數關聯起來,另乙個表關聯函式和函式名。local counters local nam...

Lua程式設計(四十五)

我們的物件目前有了標識,狀態和對狀態進行的操作,但還缺乏類體系 繼承和私有性。大多數物件導向語言提供了類的概念,類在物件的建立中扮演了模子的作用。在這些語言中,每個物件都是某個特定類的例項 instance lua語言中沒有類的概念 雖然元表的概念在某種程度上與類的概念相似,但是把元表當做類使用在後...

Lua程式設計(三)

通過昨天用lua程式語言解決八皇后問題,我對於lua語言的程式編寫有了大致的了解。今天開始了解lua的數值相關概念。在lua5.3中為數值格式提供了兩種選擇 一種為64位的integer型別,另一種則是雙精度的float型別。如果是資源受限的平台,如微控制器等我們可以使用精簡的32位數值格式。lua...